Reduce
本课属于 Coddy Swift 学习旅程的“逻辑与流程”单元。第 25 课,共 56 课。
reduce 会将整个数组合并为一个值。你可以用它求和、相乘、查找最大值或最小值,或者用多个元素构建新的字符串或数组。
let total = [1, 2, 3, 4].reduce(0) { acc, n in acc + n }
print(total) // 10第一个参数是初始累加器。闭包会接收当前累加器和下一个元素,并返回新的累加器。累加器的最终值就是结果。
对于算术运算符,Swift 提供了基于符号的简写:
[1, 2, 3, 4].reduce(0, +) // 10
[1, 2, 3, 4].reduce(1, *) // 24reduce 不一定要返回数字。累加器可以是任何类型,由你决定:
let sentence = ["hi", "there"].reduce("") { $0 + $1 + "!" }
print(sentence) // "hi!there!"挑战
简单读取一行输入:一个以逗号分隔的整数列表。分别使用 reduce,打印三行:
- 总和
- 乘积
- 最大值(使用一个返回两个参数中较大值的闭包,不要调用
.max())
假设至少有一个元素。求最大值时,你可以使用 nums[0] 作为初始累加器,并对数组的其余部分进行归约。
输入 3,7,2,8,4 时,输出为:
24
1344
8亲手试试
let nums = readLine()!.components(separatedBy: ",").map { Int($0)! }
// TODO:用 reduce 计算总和、乘积和最大值
这节课包含一个小测验。开始学习即可作答,并记录你的进度。
逻辑与流程中的所有课
自己练习: Swift 在线编辑器