Reduce
Thuộc phần Logic và luồng thực thi trong hành trình Swift của Coddy. Bài học 25 trên 56.
reduce gộp cả mảng thành một giá trị duy nhất. Bạn có thể dùng cách này để tính tổng, nhân, tìm giá trị lớn nhất hoặc nhỏ nhất, hay tạo chuỗi hoặc mảng mới từ nhiều phần tử.
let total = [1, 2, 3, 4].reduce(0) { acc, n in acc + n }
print(total) // 10Đối số đầu tiên là giá trị khởi tạo của bộ tích lũy. Closure nhận bộ tích lũy hiện tại và phần tử tiếp theo, rồi trả về bộ tích lũy mới. Giá trị cuối cùng của bộ tích lũy là kết quả.
Với các toán tử số học, Swift cung cấp cách viết tắt bằng ký hiệu:
[1, 2, 3, 4].reduce(0, +) // 10
[1, 2, 3, 4].reduce(1, *) // 24reduce không nhất thiết phải trả về một số. Bộ tích lũy có thể thuộc bất kỳ kiểu nào, bạn tự quyết định:
let sentence = ["hi", "there"].reduce("") { $0 + $1 + "!" }
print(sentence) // "hi!there!"Thử thách
DễĐọc một dòng đầu vào: một danh sách số nguyên được phân tách bằng dấu phẩy. Dùng reduce cho từng phép tính để in ra ba dòng:
- Tổng
- Tích
- Giá trị lớn nhất (dùng một closure trả về đối số lớn hơn trong hai đối số, không gọi
.max())
Giả sử có ít nhất một phần tử. Để tìm giá trị lớn nhất, bạn có thể dùng nums[0] làm giá trị khởi tạo cho bộ tích lũy rồi reduce phần còn lại của mảng.
Với đầu vào 3,7,2,8,4, đầu ra là:
24
1344
8Tự làm thử
let nums = readLine()!.components(separatedBy: ",").map { Int($0)! }
// TODO: tính tổng, tích và giá trị lớn nhất bằng reduce
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