Làm việc với kiểu Dictionaries

Một phần của tài liệu Giáo trình lập trình di động trên iOS Dành cho bậc Cao đẳng (Trang 33 - 35)

1.2 Ngôn ngữ lập trình Swift

1.2.11 Làm việc với kiểu Dictionaries

Dictionary là một kiểu tổ chức dữ liệu đặc trưng trong Swift dùng để lưu trữ danh sách

các phần tử khơng tính thứ tự (khác với mảng) của cùng một kiểu dữ liệu. Mỗi phần tử của Dictionary được định danh bởi một key (khoá) để truy xuất sau này (Khác với Set).

Khai báo Dictionary

var dicName = [KeyType:ValueType]() // Khai báo một Dictionary rỗng, hoặc var dicName:[ KeyType:ValueType] = [key1:value1, key2:value2, …] // Khởi gán var dicName:Dictionary = [key1:value1, key2:value2, …] // Khai báo và khởi gán

Truy xuất biến Dictionary

Truy xuất biến dictionary thơng qua từ khố key tương ứng: ví dụ dicName[key2] của khai báo trên đây sẽ trả về giá trị tương ứng trong dictionary là value2. Lưu ý: Giá trị trả về khi truy xuất biến dictionary có thể có hoặc nil nên nó là giá trị Optional. Ví dụ: Nếu ta dùng cấu trúc Dictionary để biểu diễn số dân của các quận trong Thành phố Hồ Chí Minh thì đoạn chương trình sẽ như sau (trong đó key của dictionary là tên mỗi quận, và giá trị tương ứng chính là dân số của quận đó):

import UIKit

var danSo:[String:Int] = ["Thu Duc": 1000000, "Quan 1": 2000000, "Quan

2": 1500000]

print("So dan trong quan Thu Duc la \(danSo["Thu Duc"]!)") Kết quả khi chạy sẽ cho ra: So dan trong quan Thu Duc la 1000000

Để thay đổi giá trị của một phần tử trong Dictionary có thể gán giá trị trực tiếp hoặc sử dụng hàm .updateValue() thơng qua giá trị của khố (key) tương ứng. Với ví dụ trên để thay đổi dân số của quận Thủ Đức ta có thể:

danSo["Thu Duc"] = 10000000 // Gán giá trị trực tiếp cho phần tử của Dictionary // Hoặc dùng hàm. Hàm sẽ trả về nil hoặc giá trị bị thay thế. Biến danSoCu sẽ là 1000000

let danSoCu = danSo.updateValue(10000000, forKey: "Thu Duc")

Để xố một phần tử từ Dictionary có thể dùng .removeValue(forKey:) hoặc gán trực tiếp giá trị nil cho phần tử đó. Ví dụ xố thơng tin về dân số quận Thủ Đức:

danSo.removeValue(forKey: "Thu Duc") // Trả về số dân bị xoá hoặc nil // Hoặc gán trực tiếp giá trị nil

26

Để duyệt các phần tử trong Dictionary dùng for-in với bộ giá trị (key, value):

for (key, value) in danSo {

print("Dan so cua quan \(key) la: \(value)") }

Và kết quả chạy chương trình sẽ là (Thứ tự có thể khác sau các lần chạy):

Dan so cua quan Thu Duc la: 1000000 Dan so cua quan Quan 1 la: 2000000 Dan so cua quan Quan 2 la: 1500000

Mảng và Dictionary

Đây là thao tác thường được sử dụng nhiều trong thực tiễn nhằm biến những mảng đã có thành kiểu Dictionary để dễ quản lý và ngược lại. Hãy xem một số ví dụ dưới đây:

Ví dụ 1: Với ví dụ trên cấu trúc Dictionary sẽ rất hữu ích khi cần biết số dân của từng

quận trong Thành phố Hồ Chí Minh. Tuy nhiên, nếu chỉ muốn lấy danh sách tên các quận hoặc số liệu dân số các quận (không cần biết tên cụ thể quận nào) thì thao tác chuyển đổi Dictionary thành mảng lại rất hữu ích. Câu lệnh sau sẽ tách tên các quận trong Dictionary thành mảng kiểu String và số liệu dân số các quận thành mảng Int:

let danhSachQuan = [String](danSo.keys) // ["Quan 2", "Thu Duc", "Quan 1"] let phanBoDanSoCacQuan = [Int](danSo.values) // [1500000, 1000000, 2000000]

Ví dụ 2: Quản lý khoảng cách địa lý giữa các thành phố.

import UIKit

// Mảng chứa danh sách tên các thành phố

var cities = ["Hà Nội", "Hồ Chí Minh", "Hải Phịng", "Đà Nẵng", "Nam Định"]

// Mảng chứa khoảng cách giữa các thành phố tương ứng ở trên với trung tâm

var distance = [0, 2000, 130, 1000, 120]

// Dictionary chứa thông tin thành phố và khoảng cách với trung tâm

let cityDistances = Dictionary(uniqueKeysWithValues: zip(cities,

distance))

Hoặc dùng lệnh sau cũng cho kết qủa tương tự câu lệnh cuối ở trên:

let cityDistances = [String:Int](uniqueKeysWithValues: zip(cities, distance))

Trong đó, hàm zip(mảng1, mảng2) sẽ tạo ra mảng gồm các cặp value1:value2 với

value1 lấy từ mảng1 và value2 lấy từ mảng2 tương ứng. Cuối cùng tham số

uniqueKeysWithValues nhằm đảm bảo rằng mỗi cặp value1:value2 là duy nhất với

["Đà Nẵng": 1000, "Hà Nội": 0, "Hồ Chí Minh": 2000, "Hải Phịng": 130, "Nam Định": 120]

Một phần của tài liệu Giáo trình lập trình di động trên iOS Dành cho bậc Cao đẳng (Trang 33 - 35)

Tải bản đầy đủ (PDF)

(137 trang)