Menu
CoddyTech

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, *)              // 24

reduce 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!"
challenge icon

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:

  1. Tổng
  2. Tích
  3. 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
8

Tự 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
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