Tìm Hiểu Dictionary Trong Swift
Dictionary trong Swift là một tập hợp các cặp key-value không có thứ tự. Mỗi cặp này gồm một key duy nhất (để tra cứu) và một value tương ứng (giá trị cần lấy). Dictionary rất hữu ích khi bạn muốn lưu trữ và truy xuất dữ liệu dựa trên một khóa nhất định một cách nhanh chóng.
1. Khái Niệm Cơ Bản
- Key : Là một giá trị duy nhất được dùng để tham chiếu đến một giá trị trong Dictionary.
- Value : Là giá trị được liên kết với một key.
Ví dụ, bạn có thể dùng Dictionary để lưu danh sách sinh viên với mã số sinh viên làm key và tên làm value.
2. Cách Khởi Tạo Dictionary
Swift cung cấp nhiều cách để khởi tạo Dictionary.
- Khởi tạo Dictionary rỗng :
var emptyDictionary: [Int: String] = [:] // Dictionary rỗng với key là Int và value là String
var anotherEmptyDict = [String: Int]() // Dictionary rỗng với key là String và value là Int
- Khởi tạo Dictionary với dữ liệu ban đầu :
let studentScores: [String: Int] = [
"Alice": 85,
"Bob": 92,
"Charlie": 78
]
print(studentScores)
Swift có thể tự suy luận kiểu dữ liệu nếu bạn cung cấp dữ liệu ban đầu.
3. Thao Tác Với Dictionary
Thêm Giá Trị
- Thêm một cặp key-value mới:
var students = ["Alice": 21, "Bob": 22]
students["Charlie"] = 20 // Thêm một cặp key-value
print(students) // Kết quả: ["Alice": 21, "Bob": 22, "Charlie": 20]
Cập Nhật Giá Trị
- Cập nhật giá trị của key:
students["Alice"] = 23
print(students) // Kết quả: ["Alice": 23, "Bob": 22, "Charlie": 20]
Truy Xuất Giá Trị
- Truy xuất giá trị qua key:
let ageOfBob = students["Bob"]
print(ageOfBob) // Kết quả: Optional(22)
- Truy xuất giá trị một cách an toàn với
if let
:
if let age = students["Alice"] {
print("Alice's age is \(age)")
} else {
print("Alice is not in the dictionary")
}
Xóa Một Phần Tử
- Xóa phần tử với key:
students.removeValue(forKey: "Charlie")
print(students) // Kết quả: ["Alice": 23, "Bob": 22]
- Xóa tất cả các phần tử:
students.removeAll()
print(students) // Kết quả: [:]
Kiểm Tra Key Hoặc Giá Trị
- Kiểm tra sự tồn tại của một key:
if let age = ages["Charlie"] {
print(age)
} else {
print("Không tìm thấy")
}
if students.keys.contains("Bob") {
print("Bob exists in the dictionary")
}
- Kiểm tra mảng giá trị:
if students.values.contains(22) {
print("Có một người 22 tuổi")
}
4. Duyệt Qua Dictionary Bạn có thể sử dụng vòng lặp for-in
để duyệt qua các cặp key-value trong Dictionary.
- Duyệt qua tất cả các cặp key-value :
let studentScores = ["Alice": 85, "Bob": 92, "Charlie": 78]
for (name, score) in studentScores {
print("\(name) có điểm số là \(score)")
}
for (name, age) in ages {
print("\(name): \(age)")
}
- Duyệt qua chỉ key hoặc value :
for name in studentScores.keys {
print("Tên sinh viên: \(name)")
}
for score in studentScores.values {
print("Điểm số: \(score)")
}
5. Dictionary Là Kiểu Giá Trị
Dictionary trong Swift là kiểu giá trị (value type), nghĩa là khi bạn sao chép nó, Swift sẽ tạo một bản sao độc lập thay vì tham chiếu cùng một vùng nhớ.
- Ví dụ :
var originalDict = ["Alice": 21]
var copiedDict = originalDict
copiedDict["Alice"] = 25
print(originalDict) // Kết quả: ["Alice": 21]
print(copiedDict) // Kết quả: ["Alice": 25]
6. Một Số Phương Thức Hữu Ích
-
count: Trả về số lượng cặp key-value trong dictionary.
-
isEmpty: Kiểm tra xem dictionary có rỗng hay không.
-
keys: Trả về một mảng chứa tất cả các key.
-
values: Trả về một mảng chứa tất cả các value.
-
Lấy số lượng phần tử :
print(studentScores.count) // Kết quả: 3
- Kiểm tra Dictionary có rỗng không :
if studentScores.isEmpty {
print("Dictionary rỗng")
}
- Chuyển đổi sang mảng :
let names = Array(studentScores.keys) // ["Alice", "Bob", "Charlie"]
let scores = Array(studentScores.values) // [85, 92, 78]
7. Dictionary Và Tuples
Khi duyệt qua Dictionary, bạn nhận được một tuple với key và value. Điều này rất hữu ích khi bạn cần thao tác trên cả hai:
let fruits = ["Táo": 10, "Cam": 15, "Chuối": 20]
for (fruit, quantity) in fruits {
print("\(fruit) có \(quantity) quả")
}
8. Sắp Xếp Dictionary
Dictionary không có thứ tự, nhưng bạn có thể sắp xếp các cặp key-value và lưu trữ kết quả trong một mảng.
- Sắp xếp theo key :
let sortedByKey = fruits.sorted { $0.key < $1.key }
print(sortedByKey) // Kết quả: [("Cam", 15), ("Chuối", 20), ("Táo", 10)]
- Sắp xếp theo value :
let sortedByValue = fruits.sorted { $0.value > $1.value }
print(sortedByValue) // Kết quả: [("Chuối", 20), ("Cam", 15), ("Táo", 10)]
9. So sánh mảng và dictionary
- Mảng: Dữ liệu được sắp xếp theo thứ tự, truy cập phần tử dựa trên chỉ số.
- Dictionary: Dữ liệu không có thứ tự, truy cập dữ liệu dựa trên key.
Khi nào nên sử dụng Dictionary?
- Khi bạn cần lưu trữ và truy xuất dữ liệu dựa trên một khóa duy nhất.
- Khi thứ tự của các phần tử không quan trọng.
- Khi bạn cần tìm kiếm một phần tử nhanh chóng dựa trên key.
Ví dụ thực tế
- Danh bạ: Lưu trữ thông tin liên lạc của người dùng.
- Cấu hình ứng dụng: Lưu trữ các cài đặt của ứng dụng.
- Bộ nhớ cache: Lưu trữ tạm thời các dữ liệu đã được tính toán để tránh tính toán lại.
Kết Luận
Dictionary là một công cụ mạnh mẽ để lưu trữ và quản lý dữ liệu trong Swift. Với khả năng lưu trữ cặp key-value, bạn có thể dễ dàng truy xuất và tổ chức dữ liệu phức tạp. Để sử dụng hiệu quả, hãy thực hành thường xuyên và khám phá thêm các tính năng nâng cao của Dictionary trong Swift!
Mở rộng:
- Dictionary và các kiểu dữ liệu phức tạp: Sử dụng dictionary để lưu trữ các cấu trúc dữ liệu khác như mảng, struct, class.
- Dictionary và protocol: Tạo các protocol để định nghĩa các hành vi chung cho các loại dictionary khác nhau.
- Dictionary và generic: Sử dụng generic để tạo các hàm và cấu trúc dữ liệu làm việc với các loại dictionary khác nhau.
Bài tập thực hành
- Tạo một dictionary để lưu trữ thông tin về các loại trái cây (tên trái cây và giá).
- Viết một hàm để tìm kiếm một từ trong một dictionary chứa các từ đồng nghĩa.
- Tạo một dictionary để lưu trữ thông tin về sinh viên (tên, tuổi, điểm trung bình).