Nội dung
Dictionary
Cũng giống như trong Objective-C thì dictionary trong Swift cũng được sử dụng để lưu trữ các giá trị và mỗi giá trị đều sẽ được truy xuất theo key tương ứng.
Kiểu dữ liệu
Để truy xuất, Dictionary sẽ lưu giá trị kèm theo một key, đa phần các kiểu dữ liệu sẽ giống nhau trong cùng một dictionary để khi biết kiểu dữ liệu của giá trị sẽ truy xuất dễ dàng hơn.
Khai báo(Declaration)
Để khai báo một dictionary bạn cần có key và value. Ví dụ:
var dictionary1: Dictionary<String, Int>
var dictionary2: [String: Int]
var dictionary3 = ["Math": 3, "Science": 8, "physics": 11]
Kiểu dữ liệu string là kiểu mà bạn sẽ thấy đa phần key sẽ hay mang nhất, còn value là kiểu dữ liệu bất kỳ và trong cùng một dictionary phải giống nhau giữa các phần tử.
Các biến dictionary có thể thay đổi các phần tử nếu dùng var và ngược lại sẽ không thể thay đổi được nếu dùng let.
Cách chỉnh sửa và truy xuất giá trị trong mảng. Ví dụ:
let value = dictionary3["swift"]
print(value)
var dictionary4 = [0: "swift", 1: "java", 2: "php"]
let fruit = dictionary4[0]
Một số tính năng thường dùng với mảng như:
dictionary4.removeValue(forKey: 0) // Xoá phần tử trong dictionary với key 0.
// Khởi tạo và thêm phần tử trong dictionary
var dictionary = [String: Int]()
dictionary["swift"] = 2
dictionary["java"] = 10
dictionary["php"] = 5
--> dictionary = [2: "swift", 10: "java", 5: "php"]
Cách truy cập các elements trong Dictionary
1. Truy cập trực tiếp
let someDic = ["a":1, "b":2, "c":3, "d":4, "e":5, "f":6, "g":7, "h":8, "i":9]
print(someDic["a"])
--> 1
print(someDic["h"])
--> 8
2. Dùng vòng lặp để truy cập tất cả các elements
let someDic = ["a":1, "b":2, "c":3, "d":4, "e":5, "f":6, "g":7, "h":8, "i":9]
for (key, value) in someDic {
print("key:\(key) value:\(value)")
}
-> key: a value: 1
-> key: b value: 2
--> ...
-> key: i value: 9
Cách modify các elements trong Dictionary
1. Add thêm element
var someDictionary = ["Nepal":"Kathmandu", "China":"Beijing", "India":"NewDelhi"]
someDictionary["Japan"] = "Tokyo"
print(someDictionary)
--> ["Nepal":"Kathmandu", "China":"Beijing", "India":"NewDelhi", "Japan": "Tokyo"]
2. Update element
var someDictionary = ["Nepal":"Kathmandu", "China":"Beijing", "India":"NewDelhi"]
someDictionary["Nepal"] = "KATHMANDU"
print(someDictionary)
--> ["Nepal":"KATHMANDU", "China":"Beijing", "India":"NewDelhi"]
Các function và properties trong Dictionary
1. isEmpty
Property có nhiệm vụ xác định dictionary có giá trị hay không, đối với trường hợp có thì bạn sử dụng return false và ngược lại sẽ là return true.
let someDictionary = ["Nepal":"Kathmandu", "China":"Beijing", "India":"NewDelhi"]
print(someDictionary.isEmpty)
return: false
2. first
Ngoài ra Property cũng được sử dụng để truy cập phần tử đầu tiên của dictionary.
Vì dictionary không có thứ tự, nên .first sẽ không phải là phần tử đầu tiên mà các bạn add vào dictionary đâu nhé.
let someDictionary = ["Nepal":"Kathmandu", "China":"Beijing", "India":"NewDelhi"]
print(someDictionary.first)
result: Optional((key: "China", value: "Beijing"))
Nếu dictionary empty thì sẽ return nil.
var someDict = [Int:String]()
print(someDict.first)
result: nil
3. count
Một chức năng khác nữa của Property là return tổng elements (key:value) có trong dictionary
let someDictionary = ["Nepal":"Kathmandu", "China":"Beijing", "India":"NewDelhi"]
print(someDictionary.count)
return: 3
4. keys
Property này return tất cả keys có trong dictionary
var someDictionary = ["Nepal":"Kathmandu", "China":"Beijing", "India":"NewDelhi"]
let dictKeys = Array(someDictionary.keys)
print(dictKeys)
return: ["China", "India", "Nepal"]
5. removeValue
Function này sẽ remove element ra khỏi dictionary
var someDictionary = ["Nepal":"Kathmandu", "China":"Beijing", "India":"NewDelhi"]
someDictionary.removeValue(forKey: "Nepal")
print(someDictionary)
return: ["India": "NewDelhi", "China": "Beijing"]
6. filter
Sau khi được lọc bằng một điều kiện bất kỳ nào đó, các elements sẽ được filter return
var cities = ["Delhi","Bangalore","Hyderabad"]
var distance = [2000,10,620]
let cityDistanceDict = Dictionary(uniqueKeysWithValues: zip(cities, distance))
var closeCities = cityDistanceDict.filter { $0.value < 1000 }
print(closeCities)
return: ["Hyderabad": 620, "Bangalore": 10]
Ví dụ ở đây là in ra những cities có khoảng cách < 1000
Những điều cần lưu ý
- Khi access vào key không tồn tại trong dictionary thì value = nil
var someDictionary = ["Nepal":"Kathmandu", "China":"Beijing", "India":"NewDelhi"]
let val = someDictionary["Japan"]
print(val)
return: nil
- Keys có sự phân biệt giữa chữ hoa và chữ thường
var someDictionary = ["Nepal":"Kathmandu", "China":"Beijing", "India":"NewDelhi"]
let lowerCaseVal = someDictionary["nepal"]
let uperCaseVal = someDictionary["Nepal"]
print(lowerCaseVal)
print(uperCaseVal)
return:
nil
Optional("Kathmandu")
- Default value cho Key không tồn tại
var someDictionary = ["Nepal":"Kathmandu", "China":"Beijing", "India":"NewDelhi"]
let val = someDictionary["nepal", default:"Not Found"]
print(val)
return: Not Found
Trong trường hợp trên key = "nepal" không tồn tại nên return default value là Not Found. Nếu key = "nepal" tồn tại thì sẽ return value tương ứng của key này
var someDictionary = ["Nepal":"Kathmandu", "China":"Beijing", "India":"NewDelhi", "nepal":"aaaaa"]
let val = someDictionary["nepal", default:"Not Found"]
print(val)
return: aaaa