Swift - Từ điển

Swift 4 dictionariesđược sử dụng để lưu trữ danh sách không có thứ tự các giá trị cùng loại. Swift 4 thực hiện việc kiểm tra nghiêm ngặt để không cho phép bạn nhập sai loại từ điển ngay cả khi nhập nhầm.

Từ điển Swift 4 sử dụng mã định danh duy nhất được gọi là keyđể lưu trữ một giá trị mà sau này có thể được tham chiếu và tra cứu thông qua cùng một khóa. Không giống như các mục trong một mảng, các mục trong mộtdictionarykhông có một thứ tự xác định. Bạn có thể sử dụng mộtdictionary khi bạn cần tra cứu các giá trị dựa trên số nhận dạng của chúng.

Khóa từ điển có thể là một số nguyên hoặc một chuỗi không có giới hạn, nhưng nó phải là duy nhất trong từ điển.

Nếu bạn gán một từ điển đã tạo cho một biến, thì nó luôn có thể thay đổi được, nghĩa là bạn có thể thay đổi nó bằng cách thêm, bớt hoặc thay đổi các mục của nó. Nhưng nếu bạn gán một từ điển cho một hằng số, thì từ điển đó là bất biến và không thể thay đổi kích thước và nội dung của từ điển.

Tạo từ điển

Bạn có thể tạo một từ điển trống thuộc một loại nhất định bằng cách sử dụng cú pháp trình khởi tạo sau:

var someDict = [KeyType: ValueType]()

Bạn có thể sử dụng cú pháp đơn giản sau để tạo một từ điển trống có khóa sẽ là kiểu Int và các giá trị liên quan sẽ là chuỗi -

var someDict = [Int: String]()

Đây là một ví dụ để tạo một từ điển từ một tập hợp các giá trị đã cho -

var someDict:[Int:String] = [1:"One", 2:"Two", 3:"Three"]

Khởi tạo dựa trên trình tự

Swift 4 cho phép bạn tạo Từ điển từ mảng (Cặp khóa-giá trị.)

var cities = [“Delhi”,”Bangalore”,”Hyderabad”]

Bạn có thể sử dụng cú pháp đơn giản sau để tạo một từ điển trống có khóa sẽ là kiểu Int và các giá trị liên quan sẽ là chuỗi -

var Distance = [2000,10, 620]

Đây là một ví dụ để tạo một từ điển từ một tập hợp các giá trị đã cho -

let cityDistanceDict = Dictionary(uniqueKeysWithValues: zip(cities, Distance))

Các dòng mã trên sẽ tạo một từ điển với Thành phố là khóa và Khoảng cách là Giá trị -

Lọc

Swift 4 cho phép bạn lọc các giá trị từ từ điển.

var closeCities = cityDistanceDict.filter { $0.value < 1000 }

Nếu chúng ta chạy đoạn mã trên, Từ điển closeCities của chúng ta sẽ được.

["Bangalore" : 10 , "Hyderabad" : 620]

Nhóm từ điển

Swift 4 cho phép bạn tạo nhóm các giá trị Từ điển.

var cities = ["Delhi","Bangalore","Hyderabad","Dehradun","Bihar"]

Bạn có thể sử dụng cú pháp đơn giản sau để nhóm các giá trị của từ điển theo bảng chữ cái đầu tiên.

var GroupedCities = Dictionary(grouping: cities ) { $0.first! }

Kết quả của đoạn mã trên sẽ là

["D" :["Delhi","Dehradun"], "B" : ["Bengaluru","Bihar"], "H" : ["Hyderabad"]]

Truy cập từ điển

Bạn có thể truy xuất một giá trị từ từ điển bằng cách sử dụng cú pháp chỉ số dưới, chuyển khóa của giá trị bạn muốn truy xuất trong dấu ngoặc vuông ngay sau tên của từ điển như sau:

var someVar = someDict[key]

Hãy kiểm tra ví dụ sau để tạo, khởi tạo và truy cập các giá trị từ từ điển -

var someDict:[Int:String] = [1:"One", 2:"Two", 3:"Three"]
var someVar = someDict[1]

print( "Value of key = 1 is \(someVar)" )
print( "Value of key = 2 is \(someDict[2])" )
print( "Value of key = 3 is \(someDict[3])" )

Khi đoạn mã trên được biên dịch và thực thi, nó tạo ra kết quả sau:

Value of key = 1 is Optional("One")
Value of key = 2 is Optional("Two")
Value of key = 3 is Optional("Three")

Sửa đổi từ điển

Bạn có thể dùng updateValue(forKey:)để thêm một giá trị hiện có vào một khóa nhất định của từ điển. Phương thức này trả về một giá trị tùy chọn của kiểu giá trị của từ điển. Đây là một ví dụ đơn giản -

var someDict:[Int:String] = [1:"One", 2:"Two", 3:"Three"]
var oldVal = someDict.updateValue("New value of one", forKey: 1)
var someVar = someDict[1]

print( "Old value of key = 1 is \(oldVal)" )
print( "Value of key = 1 is \(someVar)" )
print( "Value of key = 2 is \(someDict[2])" )
print( "Value of key = 3 is \(someDict[3])" )

Khi đoạn mã trên được biên dịch và thực thi, nó tạo ra kết quả sau:

Old value of key = 1 is Optional("One")
Value of key = 1 is Optional("New value of one")
Value of key = 2 is Optional("Two")
Value of key = 3 is Optional("Three")

Bạn có thể sửa đổi một phần tử hiện có của từ điển bằng cách gán giá trị mới tại một khóa nhất định như thể hiện trong ví dụ sau:

var someDict:[Int:String] = [1:"One", 2:"Two", 3:"Three"]
var oldVal = someDict[1]
someDict[1] = "New value of one"
var someVar = someDict[1]

print( "Old value of key = 1 is \(oldVal)" )
print( "Value of key = 1 is \(someVar)" )
print( "Value of key = 2 is \(someDict[2])" )
print( "Value of key = 3 is \(someDict[3])" )

Khi đoạn mã trên được biên dịch và thực thi, nó tạo ra kết quả sau:

Old value of key = 1 is Optional("One")
Value of key = 1 is Optional("New value of one")
Value of key = 2 is Optional("Two")
Value of key = 3 is Optional("Three")

Xóa các cặp khóa-giá trị

Bạn có thể dùng removeValueForKey()để xóa cặp khóa-giá trị khỏi từ điển. Phương thức này loại bỏ cặp khóa-giá trị nếu nó tồn tại và trả về giá trị đã loại bỏ hoặc trả về nil nếu không có giá trị nào tồn tại. Đây là một ví dụ đơn giản -

var someDict:[Int:String] = [1:"One", 2:"Two", 3:"Three"]
var removedValue = someDict.removeValue(forKey: 2)

print( "Value of key = 1 is \(someDict[1])" )
print( "Value of key = 2 is \(someDict[2])" )
print( "Value of key = 3 is \(someDict[3])" )

Khi đoạn mã trên được biên dịch và thực thi, nó tạo ra kết quả sau:

Value of key = 1 is Optional("One")
Value of key = 2 is nil
Value of key = 3 is Optional("Three")

Bạn cũng có thể sử dụng cú pháp chỉ số con để xóa cặp khóa-giá trị khỏi từ điển bằng cách gán giá trị nilcho khóa đó. Đây là một ví dụ đơn giản -

var someDict:[Int:String] = [1:"One", 2:"Two", 3:"Three"]

someDict[2] = nil

print( "Value of key = 1 is \(someDict[1])" )
print( "Value of key = 2 is \(someDict[2])" )
print( "Value of key = 3 is \(someDict[3])" )

Khi đoạn mã trên được biên dịch và thực thi, nó tạo ra kết quả sau:

Value of key = 1 is Optional("One")
Value of key = 2 is nil
Value of key = 3 is Optional("Three")

Lặp lại từ điển

Bạn có thể sử dụng một for-in vòng lặp để lặp lại toàn bộ tập hợp các cặp khóa-giá trị trong Từ điển như thể hiện trong ví dụ sau:

var someDict:[Int:String] = [1:"One", 2:"Two", 3:"Three"]

for (index, keyValue) in someDict.enumerated() {
   print("Dictionary key \(index) - Dictionary value \(keyValue)")
}

Khi đoạn mã trên được biên dịch và thực thi, nó tạo ra kết quả sau:

Dictionary key 2 - Dictionary value Two
Dictionary key 3 - Dictionary value Three
Dictionary key 1 - Dictionary value One

Bạn có thể dùng enumerate() hàm trả về chỉ mục của mục cùng với cặp (khóa, giá trị) của nó như được hiển thị bên dưới trong ví dụ:

var someDict:[Int:String] = [1:"One", 2:"Two", 3:"Three"]
for (key, value) in someDict.enumerated() {
   print("Dictionary key \(key) - Dictionary value \(value)")
}

Khi đoạn mã trên được biên dịch và thực thi, nó tạo ra kết quả sau:

Dictionary key 0 - Dictionary value (key: 2, value: "Two")
Dictionary key 1 - Dictionary value (key: 3, value: "Three")
Dictionary key 2 - Dictionary value (key: 1, value: "One")

Chuyển đổi sang Mảng

Bạn có thể trích xuất danh sách các cặp khóa-giá trị từ một từ điển nhất định để xây dựng các mảng riêng biệt cho cả khóa và giá trị. Đây là một ví dụ -

var someDict:[Int:String] = [1:"One", 2:"Two", 3:"Three"]

let dictKeys = [Int](someDict.keys)
let dictValues = [String](someDict.values)

print("Print Dictionary Keys")

for (key) in dictKeys {
   print("\(key)")
}
print("Print Dictionary Values")

for (value) in dictValues {
   print("\(value)")
}

Khi đoạn mã trên được biên dịch và thực thi, nó tạo ra kết quả sau:

Print Dictionary Keys
2
3
1
Print Dictionary Values
Two
Three
One

Thuộc tính đếm

Bạn có thể sử dụng chế độ chỉ đọc count thuộc tính của từ điển để tìm ra số lượng mục trong từ điển như hình dưới đây -

var someDict1:[Int:String] = [1:"One", 2:"Two", 3:"Three"]
var someDict2:[Int:String] = [4:"Four", 5:"Five"]

print("Total items in someDict1 = \(someDict1.count)")
print("Total items in someDict2 = \(someDict2.count)")

Khi đoạn mã trên được biên dịch và thực thi, nó tạo ra kết quả sau:

Total items in someDict1 = 3
Total items in someDict2 = 2

Thuộc tính trống

Bạn có thể sử dụng chế độ chỉ đọc empty thuộc tính của từ điển để tìm xem từ điển có trống hay không, như được hiển thị bên dưới:

var someDict1:[Int:String] = [1:"One", 2:"Two", 3:"Three"]
var someDict2:[Int:String] = [4:"Four", 5:"Five"]
var someDict3:[Int:String] = [Int:String]()

print("someDict1 = \(someDict1.isEmpty)")
print("someDict2 = \(someDict2.isEmpty)")
print("someDict3 = \(someDict3.isEmpty)")

Khi đoạn mã trên được biên dịch và thực thi, nó tạo ra kết quả sau:

someDict1 = false
someDict2 = false
someDict3 = true