Nếu bạn có một danh sách các mục [ví dụ: danh sách tên ô tô], việc lưu trữ ô tô trong các biến đơn lẻ có thể trông như thế này
hãy để xe1 = "Saab";
cho car2 = "Volvo";
cho xe3 = "BMW";
Tuy nhiên, nếu bạn muốn đi vòng qua các ô tô và tìm một ô tô cụ thể thì sao?
Giải pháp là một mảng
Một mảng có thể chứa nhiều giá trị dưới một tên duy nhất và bạn có thể truy cập các giá trị bằng cách tham chiếu đến một số chỉ mục
Tạo một mảng
Sử dụng một mảng chữ là cách dễ nhất để tạo một mảng JavaScript
cú pháp
const tên_mảng = [mục1,mục2,. ];
Một thực tế phổ biến là khai báo mảng với từ khóa const
Tìm hiểu thêm về const với mảng trong chương. Mảng JS Const
Dấu cách và ngắt dòng không quan trọng. Một khai báo có thể trải rộng trên nhiều dòng
Bạn cũng có thể tạo một mảng rồi cung cấp các phần tử
Ví dụ
const xe = [];
xe ô tô[0]= "Saab";
xe[1]= "Volvo";
ô tô[2]= "BMW";
Sử dụng Từ khóa JavaScript mới
Ví dụ sau cũng tạo một Array và gán giá trị cho nó
Hai ví dụ trên làm hoàn toàn giống nhau
Không cần sử dụng new Array[]
Để đơn giản, dễ đọc và tốc độ thực thi, hãy sử dụng phương thức ký tự mảng
Truy cập các phần tử mảng
Bạn truy cập một phần tử mảng bằng cách tham khảo số chỉ mục
Ghi chú. Chỉ mục mảng bắt đầu bằng 0
[0] là phần tử đầu tiên. [1] là phần tử thứ hai
Thay đổi một phần tử mảng
Câu lệnh này thay đổi giá trị của phần tử đầu tiên trong cars
Truy cập toàn bộ mảng
Với JavaScript, toàn bộ mảng có thể được truy cập bằng cách tham khảo tên mảng
Ví dụ
const xe = ["Saab", "Volvo", "BMW"];
tài liệu. getElementById["bản trình diễn"]. InternalHTML = ô tô;
Mảng là đối tượng
Mảng là một loại đối tượng đặc biệt. Toán tử typeof
trong JavaScript trả về "đối tượng" cho mảng
Tuy nhiên, mảng JavaScript được mô tả tốt nhất là mảng
Mảng sử dụng số để truy cập "phần tử" của nó. Trong ví dụ này, person[0]
trả về John
Các đối tượng sử dụng tên để truy cập "thành viên" của nó. Trong ví dụ này, person.firstName
trả về John
Các phần tử mảng có thể là đối tượng
Biến JavaScript có thể là đối tượng. Mảng là loại đối tượng đặc biệt
Do đó, bạn có thể có các biến thuộc các loại khác nhau trong cùng một Mảng
Bạn có thể có các đối tượng trong một Mảng. Bạn có thể có các chức năng trong một Mảng. Bạn có thể có các mảng trong một Mảng
Swift cung cấp ba loại bộ sưu tập chính, được gọi là mảng, bộ và từ điển, để lưu trữ bộ sưu tập giá trị. Mảng là tập hợp các giá trị có thứ tự. Bộ là bộ sưu tập không có thứ tự của các giá trị duy nhất. Từ điển là bộ sưu tập không có thứ tự của các liên kết khóa-giá trị
Mảng, bộ và từ điển trong Swift luôn rõ ràng về các loại giá trị và khóa mà chúng có thể lưu trữ. Điều này có nghĩa là bạn không thể chèn sai loại giá trị vào bộ sưu tập do nhầm lẫn. Điều đó cũng có nghĩa là bạn có thể tự tin về loại giá trị mà bạn sẽ truy xuất từ bộ sưu tập
Ghi chú
Các kiểu mảng, tập hợp và từ điển của Swift được triển khai dưới dạng các tập hợp chung. Để biết thêm về các loại và tập hợp chung, hãy xem Thuộc loại chung .
Khả năng thay đổi của Bộ sưu tập
Nếu bạn tạo một mảng, một tập hợp hoặc một từ điển và gán nó cho một biến, thì tập hợp được tạo sẽ có thể thay đổi được. Điều này có nghĩa là bạn có thể thay đổi [hoặc thay đổi] bộ sưu tập sau khi nó được tạo bằng cách thêm, xóa hoặc thay đổi các mục trong bộ sưu tập. Nếu bạn gán một mảng, một tập hợp hoặc một từ điển cho một hằng số, thì tập hợp đó là bất biến và không thể thay đổi kích thước cũng như nội dung của nó
Ghi chú
Đó là cách tốt để tạo các bộ sưu tập không thay đổi trong mọi trường hợp mà bộ sưu tập không cần thay đổi. Làm như vậy giúp bạn dễ dàng suy luận về mã của mình hơn và cho phép trình biên dịch Swift tối ưu hóa hiệu suất của các bộ sưu tập bạn tạo
Mảng
Một mảng lưu trữ các giá trị cùng loại trong một danh sách có thứ tự. Cùng một giá trị có thể xuất hiện nhiều lần trong một mảng ở các vị trí khác nhau
Ghi chú
Loại Array
của Swift được kết nối với lớp NSArray
của Foundation
Để biết thêm thông tin về cách sử dụng Array
với Foundation và Cocoa, xem
Kiểu mảng Cú pháp viết tắt
Loại mảng Swift được viết đầy đủ là Array
, trong đó Element
là loại giá trị mà mảng được phép lưu trữ. Bạn cũng có thể viết kiểu của một mảng ở dạng viết tắt là [Element]
. Mặc dù hai dạng này giống hệt nhau về mặt chức năng, nhưng dạng tốc ký được ưa thích hơn và được sử dụng xuyên suốt hướng dẫn này khi đề cập đến kiểu của một mảng
Tạo một mảng trống
Bạn có thể tạo một mảng trống của một loại nhất định bằng cách sử dụng cú pháp khởi tạo
- var someInts . [ Int ] = []
- print [ "someInts thuộc loại [Int] với \ [someInts.đếm] mục. " ]
- // In "someInts thuộc loại [Int] với 0 mục. "
Lưu ý rằng loại của biến someInts
được suy ra là [Int]
từ loại của trình khởi tạo
Ngoài ra, nếu ngữ cảnh đã cung cấp thông tin loại, chẳng hạn như đối số hàm hoặc biến hoặc hằng số đã được nhập, bạn có thể tạo một mảng trống với một ký tự mảng trống, được viết là []
[một cặp dấu ngoặc vuông trống]
- someInts . chắp thêm [ 3 ]
- // someInts bây giờ chứa 1 giá trị kiểu Int
- someInts = []
- // someInts bây giờ là một mảng rỗng, nhưng vẫn thuộc kiểu [Int]
Tạo một mảng với giá trị mặc định
Loại Array
của Swift cũng cung cấp một trình khởi tạo để tạo một mảng có kích thước nhất định với tất cả các giá trị của nó được đặt thành cùng một giá trị mặc định. Bạn truyền cho trình khởi tạo này một giá trị mặc định thuộc loại thích hợp [được gọi là NSArray
0]. và số lần giá trị đó được lặp lại trong mảng mới [được gọi là NSArray
1]
- var threeDoubles = Mảng [ repeating: 0. 0 , đếm . 3 ]
- // threeDoubles thuộc loại [Double] và bằng [0. 0, 0. 0, 0. 0]
Tạo một mảng bằng cách thêm hai mảng lại với nhau
Bạn có thể tạo một mảng mới bằng cách cộng hai mảng hiện có với các loại tương thích với nhau bằng toán tử cộng [NSArray
2]. Kiểu của mảng mới được suy ra từ kiểu của hai mảng bạn cộng lại với nhau
- var anotherThreeDoubles = Mảng [ repeating: 2. 5 , đếm . 3 ]
- // otherThreeDoubles thuộc loại [Double] và bằng [2. 5, 2. 5, 2. 5]
- var sáu đôi = ba đôi + anotherThreeDoubles
- // sixDoubles được suy ra là [Double], và bằng [0. 0, 0. 0, 0. 0, 2. 5, 2. 5, 2. 5]
Creating an Array with an Array Literal
Bạn cũng có thể khởi tạo một mảng bằng một ký tự mảng, đây là cách viết tắt để viết một hoặc nhiều giá trị dưới dạng tập hợp mảng. Một mảng chữ được viết dưới dạng một danh sách các giá trị, được phân tách bằng dấu phẩy, được bao quanh bởi một cặp dấu ngoặc vuông
- [ giá trị 1 , giá trị 2 , []
- print [ "letters is of type Set \ [letters . đếm] mục. " ]
- // Prints "letters is of type Set with 0 items."
Ghi chú
The type of the []
5 variable is inferred to be []
6, from the type of the initializer
Ngoài ra, nếu ngữ cảnh đã cung cấp thông tin về loại, chẳng hạn như đối số hàm hoặc biến hoặc hằng đã được nhập, bạn có thể tạo tập hợp trống với ký tự mảng trống
- letters . insert [ "a" ]
- // letters now contains 1 value of type Character
- letters = []
- // letters is now an empty set, but is still of type Set
Creating a Set with an Array Literal
Bạn cũng có thể khởi tạo một tập hợp với một ký tự mảng, như một cách viết tắt để viết một hoặc nhiều giá trị dưới dạng tập hợp tập hợp
Ví dụ dưới đây tạo một tập hợp có tên là []
7 để lưu trữ các giá trị NSArray
4
- var Thể loại yêu thích . Bộ < Chuỗi > = [ "Rock", "Classical", "Hip hop"]
- // favouriteGenres đã được khởi tạo với ba mục ban đầu
Biến []
7 được khai báo là “tập hợp các giá trị NSArray
4”, được viết là Array
1. Bởi vì bộ cụ thể này đã chỉ định một loại giá trị là NSArray
4, nên nó chỉ được phép lưu trữ các giá trị NSArray
4. Ở đây, bộ []
7 được khởi tạo với ba giá trị NSArray
4 [Array
6, Array
7 và Array
8], được viết trong một mảng chữ
Ghi chú
Tập hợp []
7 được khai báo là một biến [với phần giới thiệu Array
4] và không phải là hằng số [với phần giới thiệu Array
5] vì các phần tử được thêm và bớt trong các ví dụ bên dưới
Một loại tập hợp không thể được suy ra từ một mảng chữ, vì vậy loại someInts
9 phải được khai báo rõ ràng. Tuy nhiên, do suy luận kiểu của Swift, bạn không cần phải viết kiểu của các phần tử của tập hợp nếu bạn đang khởi tạo nó bằng một mảng chữ chứa các giá trị của chỉ một kiểu. Thay vào đó, phần khởi tạo của []
7 có thể được viết dưới dạng ngắn hơn
- var Thể loại yêu thích . Đặt = [ "Đá" , "Classical", "Hip hop"]
Bởi vì tất cả các giá trị trong mảng ký tự đều cùng loại, Swift có thể suy ra rằng ___5_______1 là loại chính xác để sử dụng cho biến _______13_______7
Truy cập và sửa đổi một tập hợp
Bạn truy cập và sửa đổi một tập hợp thông qua các phương thức và thuộc tính của nó
Để biết số lượng mục trong một tập hợp, hãy kiểm tra thuộc tính chỉ đọc ____________1 của nó
- in [ "Tôi có \ [favoriteGenres.đếm] thể loại nhạc yêu thích. " ]
- // In ra "Tôi có 3 thể loại nhạc yêu thích. "
Use the Boolean Array
4 property as a shortcut for checking whether the NSArray
1 property is equal to Array
6
- if Thể loại yêu thích . isEmpty {
- print [ "Về âm nhạc, tôi không kén chọn. " ]
- } else {
- in [ "Tôi có sở thích âm nhạc cụ thể. " ]
- }
- // In ra "Tôi có sở thích âm nhạc cụ thể. "
Bạn có thể thêm một mục mới vào một tập hợp bằng cách gọi phương thức NSArray
10 của tập hợp
- Thể loại yêu thích . insert [ "Jazz" ]
- // favouriteGenres hiện có 4 mục
Bạn có thể xóa một mục khỏi một tập hợp bằng cách gọi phương thức NSArray
11 của tập hợp, phương thức này sẽ xóa mục nếu đó là thành viên của tập hợp và trả về giá trị đã xóa hoặc trả về NSArray
12 nếu tập hợp không chứa nó. Ngoài ra, tất cả các mục trong một bộ có thể được xóa bằng phương pháp NSArray
13 của nó
- nếu hãy loại bỏThể loại = Thể loại yêu thích.xóa [ "Đá" ] {
- in [ " \ [removedGenre]? I'm over it." ]
- } else {
- print [ "Tôi chưa bao giờ quan tâm nhiều đến điều đó. " ]
- }
- // In ra "Rock? I'm over it. "
Để kiểm tra xem một bộ có chứa một mục cụ thể hay không, hãy sử dụng phương thức NSArray
14
- if Thể loại yêu thích . chứa [ "Funk" ] {
- print [ "Tôi đứng vững. " ]
- } else {
- in [ "Ở đây vui quá. " ]
- }
- // Bản in "Ở đây sôi nổi quá. "
Lặp lại một tập hợp
Bạn có thể lặp lại các giá trị trong một tập hợp với vòng lặp someInts
3-someInts
4
- dành cho thể loại trong Thể loại yêu thích {
- in [ " \ [genre]"]
- }
- // cổ điển
- // Nhạc Jazz
- // Hiphop
For more about the someInts
3-someInts
4 loop, see
Loại someInts
9 của Swift không có thứ tự xác định. Để lặp lại các giá trị của một tập hợp theo một thứ tự cụ thể, hãy sử dụng phương thức NSArray
20, phương thức này trả về các phần tử của tập hợp dưới dạng một mảng được sắp xếp bằng toán tử NSArray
21
- dành cho thể loại trong Thể loại yêu thích . đã sắp xếp [] {
- in [ " \ [genre]"]
- }
- // cổ điển
- // Hiphop
- // Nhạc Jazz
Thực hiện Set Operations
Bạn có thể thực hiện hiệu quả các thao tác tập hợp cơ bản, chẳng hạn như kết hợp hai tập hợp với nhau, xác định giá trị chung của hai tập hợp hoặc xác định xem hai tập hợp có chứa tất cả, một số hoặc không có giá trị nào giống nhau hay không
Hoạt động tập hợp cơ bản
Hình minh họa bên dưới mô tả hai tập hợp—[Int]
4 và [Int]
5—với kết quả của các phép toán tập hợp khác nhau được biểu thị bằng các vùng được tô bóng
Sử dụng phương pháp
NSArray
24 để tạo một tập hợp mới chỉ có các giá trị chung cho cả hai tập hợpSử dụng phương pháp
NSArray
25 để tạo một tập hợp mới với các giá trị trong một trong hai tập hợp, nhưng không phải cả haiSử dụng phương pháp
NSArray
26 để tạo một tập hợp mới với tất cả các giá trị trong cả hai tập hợpSử dụng phương pháp
NSArray
27 để tạo một tập hợp mới với các giá trị không có trong tập hợp đã chỉ định
- hãy số lẻ . Đặt = [ 1 , 3, 5, 7, 9]
- hãy chữ số chẵn . Đặt = [ 0 , 2, 4, 6, 8]
- let singleDigitPrimeNumbers . Đặt = [ 2 , 3, 5, 7]
- chữ số lẻ . công đoàn [ Chẵn Chữ số ]. đã sắp xếp []
- // [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
- chữ số lẻ . giao lộ [ chữ số chẵn ]. đã sắp xếp []
- // []
- chữ số lẻ . trừ [ singleDigitPrimeNumbers ]. đã sắp xếp []
- // [1, 9]
- chữ số lẻ . sự khác biệt đối xứng [ singleDigitPrimeNumbers ]. đã sắp xếp []
- // [1, 2, 9]
Đặt tư cách thành viên và bình đẳng
Hình minh họa bên dưới mô tả ba tập hợp—[Int]
4, [Int]
5 và NSArray
30—với các vùng chồng chéo đại diện cho các phần tử được chia sẻ giữa các tập hợp. Tập hợp [Int]
4 là tập hợp siêu của tập hợp [Int]
5, bởi vì [Int]
4 chứa tất cả các phần tử trong tập hợp [Int]
5. Ngược lại, tập hợp [Int]
5 là tập hợp con của tập hợp [Int]
4, bởi vì tất cả các phần tử trong [Int]
5 cũng được chứa bởi [Int]
4. Tập hợp [Int]
5 và tập hợp NSArray
30 không liên quan với nhau vì chúng không có phần tử chung nào
Sử dụng toán tử “bằng nhau” [_______6_______41] để xác định xem hai tập hợp có chứa tất cả các giá trị giống nhau hay không
Sử dụng phương pháp
NSArray
42 để xác định xem tất cả các giá trị của một tập hợp có nằm trong tập hợp đã chỉ định hay khôngSử dụng phương pháp
NSArray
43 để xác định xem một tập hợp có chứa tất cả các giá trị trong một tập hợp đã chỉ định hay khôngSử dụng các phương pháp
NSArray
44 hoặcNSArray
45 để xác định xem một tập hợp là tập con hay tập siêu, nhưng không bằng, một tập xác địnhSử dụng phương pháp
NSArray
46 để xác định xem hai tập hợp không có giá trị chung
- hãy gia súc . Đặt = [ "🐶" , "🐱"]
- hãy trang trạiĐộng vật . Đặt = [ "🐮" , "🐔", "🐑", "🐶", "🐱"]
- hãy động vật trong thành phố . Đặt = [ "🐦" , "🐭"]
- động vật trong nhà . isSubset [ of . động vật nông trại ]
- // ĐÚNG VẬY
- trang trạiĐộng vật . isSuperset [ of . động vật trong nhà ]
- // ĐÚNG VẬY
- trang trạiĐộng vật . isDisjoint [ with . động vật thành phố ]
- // ĐÚNG VẬY
từ điển
Một từ điển lưu trữ các liên kết giữa các khóa cùng loại và các giá trị cùng loại trong một bộ sưu tập không có thứ tự xác định. Mỗi giá trị được liên kết với một khóa duy nhất, hoạt động như một mã định danh cho giá trị đó trong từ điển. Unlike items in an array, items in a dictionary don’t have a specified order. Bạn sử dụng từ điển khi cần tra cứu các giá trị dựa trên mã định danh của chúng, giống như cách mà từ điển trong thế giới thực được sử dụng để tra cứu định nghĩa cho một từ cụ thể
Ghi chú
Loại NSArray
47 của Swift được kết nối với lớp NSArray
48 của Foundation
Để biết thêm thông tin về cách sử dụng NSArray
47 với Kem nền và Ca cao, hãy xem
Loại từ điển Cú pháp tốc ký
The type of a Swift dictionary is written in full as NSArray
50, where NSArray
51 is the type of value that can be used as a dictionary key, and NSArray
52 is the type of value that the dictionary stores for those keys
Ghi chú
Loại từ điển NSArray
51 phải tuân theo giao thức []
0, giống như loại giá trị của một tập hợp
Bạn cũng có thể viết loại từ điển ở dạng tốc ký là NSArray
55. Mặc dù hai dạng này giống hệt nhau về mặt chức năng, nhưng dạng tốc ký được ưa thích hơn và được sử dụng xuyên suốt hướng dẫn này khi đề cập đến loại từ điển
Tạo một từ điển trống
Như với mảng, bạn có thể tạo một NSArray
47 trống của một loại nhất định bằng cách sử dụng cú pháp bộ khởi tạo
- var namesOfIntegers . [ Int . Chuỗi ] = [. ]
- // nameOfIntegers trống [Int. String] dictionary
Ví dụ này tạo một từ điển trống loại NSArray
57 để lưu trữ các tên giá trị số nguyên mà con người có thể đọc được. Các khóa của nó thuộc loại [Int]
2 và các giá trị của nó thuộc loại NSArray
4
Nếu ngữ cảnh đã cung cấp thông tin loại, bạn có thể tạo một từ điển trống với một từ điển trống, được viết là NSArray
60 [dấu hai chấm bên trong một cặp dấu ngoặc vuông]
- namesOfIntegers [ 16 ] = "sixteen"