Menu
CoddyTech

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

reduce 不一定要返回数字。累加器可以是任何类型,由你决定:

let sentence = ["hi", "there"].reduce("") { $0 + $1 + "!" }
print(sentence)                    // "hi!there!"
challenge icon

挑战

简单

读取一行输入:一个以逗号分隔的整数列表。分别使用 reduce,打印三行:

  1. 总和
  2. 乘积
  3. 最大值(使用一个返回两个参数中较大值的闭包,不要调用 .max())

假设至少有一个元素。求最大值时,你可以使用 nums[0] 作为初始累加器,并对数组的其余部分进行归约。

输入 3,7,2,8,4 时,输出为:

24
1344
8

亲手试试

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

// TODO:用 reduce 计算总和、乘积和最大值
quiz icon自我测试

这节课包含一个小测验。开始学习即可作答,并记录你的进度。

逻辑与流程中的所有课

自己练习: Swift 在线编辑器