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"]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:
- Nhiệt độ Celsius, nối bằng
, - 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=-17Tự 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 ";"
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
1Chuỗi chuyên sâu
Đếm và chỉ sốChữ hoa, chữ thường và xóa khoảng trắngTìm kiếm trong chuỗiTách và nối chuỗiThay thế chuỗi conÔn tập: Kiểm tra tên người dùng4Tập hợp
Tạo tập hợpPhép hợp và phép giaoPhép trừ và hiệu đối xứngTập con và tập hợp conÔn tập: Bộ lọc thẻ7Dự án: Theo dõi thói quen
Tổng quan dự ánĐánh dấu hoàn thành10Dự án: bộ máy trắc nghiệm
Tổng quan dự ánĐặt câu hỏiTự luyện tập: Playground Swift