假设有一个字符串数组:
let words = ["apple", "is", "good", "for", "health"]
目标:统计长度大于 3 的单词的字符总数
步骤分析
- 过滤长度大于 3 的单词 →
filter - 把每个单词映射成它的长度 →
map - 把长度累加起来 →
reduce
实现代码
let totalLength = words
.filter { $0.count > 3 } // 过滤长度大于3的单词
.map { $0.count } // 映射为单词长度
.reduce(0, +) // 求和
print(totalLength) // 输出 15
解释:
-
filter { $0.count > 3 }- 过滤结果:
["apple", "good", "health"]
- 过滤结果:
-
map { $0.count }- 映射结果:
[5, 4, 6]
- 映射结果:
-
reduce(0, +)- 求和结果:
5 + 4 + 6 = 15
- 求和结果:
一行更简洁的写法(闭包内直接求长度)
let totalLength = words
.filter { $0.count > 3 }
.reduce(0) { $0 + $1.count }
print(totalLength) // 15
- 这里直接用
reduce来累加长度,不需要先map。 - 对于小型操作,这种写法更高效。
✅ 总结:
filter→ 筛选符合条件的元素map→ 转换元素(比如取长度)reduce→ 聚合元素(比如求和、累积)