Menu
CoddyTech

Map

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

map nhận một closure và áp dụng nó cho từng phần tử, sau đó trả về một mảng mới chứa các kết quả. Mảng mới có độ dài bằng mảng ban đầu.

let nums = [1, 2, 3, 4]
let doubled = nums.map { $0 * 2 }
print(doubled)               // [2, 4, 6, 8]

$0 là cách viết tắt cho tham số đầu tiên của closure. Dạng dài hơn ghi rõ tên tham số và kiểu trả về:

let doubled = nums.map { (n: Int) -> Int in
    return n * 2
}

map cũng có thể thay đổi kiểu phần tử. Ánh xạ một [Int] qua một closure trả về String sẽ cho bạn một [String]:

let labels = nums.map { "#\($0)" }
print(labels)                // ["#1", "#2", "#3", "#4"]
challenge icon

Thử thách

Dễ

Đọc một dòng đầu vào: danh sách số nguyên (integer) được phân tách bằng dấu phẩy (nhiệt độ tính theo Fahrenheit).

Chuyển đổi từng số sang Celsius bằng công thức C = (F - 32) * 5 / 9 với phép tính số nguyên (cắt về 0, không có phần thập phân). In ra trên các dòng riêng biệt:

  1. Nhiệt độ Celsius, nối bằng ,
  2. Một nhãn cho mỗi nhiệt độ, có tiền tố F=<f> C=<c>, nối bằng ;

Dùng map cho cả hai dòng.

Với đầu vào 32,212,98,0, đầu ra là:

0,100,36,-17
F=32 C=0;F=212 C=100;F=98 C=36;F=0 C=-17

Tự làm thử

let f = readLine()!.components(separatedBy: ",").map { Int($0)! }

// TODO: dòng 1 = các giá trị độ C nối với nhau bằng ","
// TODO: dòng 2 = các nhãn "F=<f> C=<c>" nối với nhau bằ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