Menu
CoddyTech

Cập nhật từ điển

Thuộc phần Logic và luồng thực thi trong hành trình Swift của Coddy. Bài học 14 trên 56.

Bạn ghi vào từ điển giống như cách bạn đọc từ điển: dùng chỉ số dưới.

var prices: [String: Int] = ["apple": 1]
prices["bread"] = 3                // thêm khóa (key)
prices["apple"] = 2                // cập nhật khóa hiện có
prices["apple"] = nil              // xóa khóa

Hai phương thức có tên này thực hiện cùng một việc một cách tường minh hơn:

prices.updateValue(5, forKey: "milk") // trả về giá trị cũ hoặc nil
prices.removeValue(forKey: "bread")  // trả về giá trị đã xóa hoặc nil

Các phương thức (method) có tên trả về giá trị trước đó, hữu ích khi bạn cần biết khóa đã tồn tại hay chưa.

Mẫu chỉ số mặc định ở bài học trước kết hợp rất tốt với thao tác thay đổi dữ liệu (mutation), giúp bạn tạo bộ đếm mà không cần viết if:

var counts: [String: Int] = [:]
for letter in ["a", "b", "a"] {
    counts[letter, default: 0] += 1
}
// counts == ["a": 2, "b": 1]
challenge icon

Thử thách

Trung bình

Đọc một dòng đầu vào: danh sách các thao tác được phân tách bằng dấu phẩy trên một từ điển ban đầu. Mỗi thao tác thuộc một trong các loại sau:

  • set:<key>:<value> thêm hoặc cập nhật (giá trị là số nguyên)
  • add:<key>:<value> cộng giá trị vào giá trị hiện có (dùng mẫu chỉ số mặc định)
  • del:<key> xóa khóa

Sau khi áp dụng lần lượt mọi thao tác vào một từ điển [String: Int] ban đầu rỗng, in các khóa theo thứ tự bảng chữ cái, mỗi khóa trên một dòng, theo định dạng <key>=<value>.

Với đầu vào set:a:5,add:a:3,set:b:1,del:b,add:c:2, đầu ra là:

a=8
c=2

Tự làm thử

let ops = readLine()!.components(separatedBy: ",")
var dict: [String: Int] = [:]

// TODO: phân tích từng op và thực hiện set/add/del; in ra các khóa đã sắp xếp cùng giá trị tương ứng
quiz iconTự kiểm tra

Bài học này có một bài trắc nghiệm ngắn. Bắt đầu bài học để trả lời và theo dõi tiến độ.

Tất cả bài học trong Logic và luồng thực thi

Tự luyện tập: Playground Swift