Menu
CoddyTech

Tra cứu tùy chọ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 13 trên 56.

Phép truy cập bằng chỉ số của từ điển luôn trả về một giá trị Optional: giá trị khi khóa tồn tại, nil khi khóa không tồn tại. Swift buộc bạn xử lý cả hai trường hợp.

let prices: [String: Int] = ["apple": 1, "bread": 3]
let p = prices["apple"]
print(p)                          // Optional(1)

Ba cách quen thuộc để xử lý giá trị tùy chọn. Hãy chọn cách phù hợp với tình huống.

1. if let: xử lý rõ ràng cả hai nhánh:

if let p = prices["apple"] {
    print("apple costs \(p)")
} else {
    print("unknown")
}

2. toán tử nil-coalescing ??: cung cấp giá trị dự phòng ngay trên cùng một dòng:

let p = prices["olive"] ?? 0    // 0

3. chỉ số dưới với giá trị mặc định: kết quả giống nhau, nhưng giá trị mặc định cũng được giữ lại nếu bạn ghi lại vào khóa đó:

var counts = ["a": 2]
counts["b", default: 0] += 1   // counts == ["a": 2, "b": 1]
challenge icon

Thử thách

Dễ

Đã cho từ điển prices. Đọc một dòng đầu vào: danh sách các mặt hàng được phân tách bằng dấu phẩy mà người dùng muốn mua.

Với mỗi mặt hàng, theo thứ tự đầu vào, hãy tra cứu mặt hàng đó trong prices. In một dòng cho mỗi mặt hàng:

  • <item> @ <price> khi mặt hàng có trong từ điển
  • <item> not sold nếu không

Sau khi liệt kê mọi mặt hàng, in một dòng cuối cùng: Total: <sum>. Coi mặt hàng không có trong từ điển có giá là 0 bằng cách dùng toán tử nil-coalescing.

Với đầu vào apple,bread,olive,milk, đầu ra là:

apple @ 1
bread @ 3
olive not sold
milk @ 4
Total: 8

Tự làm thử

let prices: [String: Int] = ["apple": 1, "bread": 3, "milk": 4]
let items = readLine()!.components(separatedBy: ",")

// TODO: tra cứu từng mặt hàng; in ra '@ price' hoặc 'not sold'; tính tổng bằng ?? 0
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