0Pricing
Swift Academy · 课时

数组上的 Map、Filter 与 Reduce

使用函数式高阶函数转换数组

数组上的 Map、Filter 与 Reduce 是 CoddyKit 上的免费 Swift Academy 课时。 这是第 3 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Swift Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Swift Academy 课程共包含 4 节课。

欢迎

Swift 的高阶函数——`map`、`filter` 和 `reduce`——可以在不修改集合的情况下转换集合。它们能明确表达您的意图,并消除容易出错的循环。

映射——转换每个元素

```swift let nums = [1, 2, 3, 4] let doubled = nums.map { $0 * 2 } // [2,4,6,8] let strings = nums.map { "Item \($0)" } // ["Item 1","Item 2",...] ``` `map` 会对每个元素应用闭包,并返回一个包含结果的新数组。

筛选——保留匹配的元素

```swift let scores = [45, 80, 92, 37, 68] let passing = scores.filter { $0 >= 60 } // [80,92,68] let even = (1...10).filter { $0 % 2 == 0 } // [2,4,6,8,10] ``` `filter` 会返回一个新数组,其中只包含闭包返回 `true` 的元素。

归并——组合为一个值

```swift let nums = [1, 2, 3, 4, 5] let sum = nums.reduce(0) { $0 + $1 } // 15 let product = nums.reduce(1, *) // 120 let joined = ["a","b","c"].reduce("") { $0 + $1 } // "abc" ```

串联映射、筛选与归并

```swift let result = (1...10) .filter { $0 % 2 == 0 } // [2,4,6,8,10] .map { $0 * $0 } // [4,16,36,64,100] .reduce(0, +) // 220 ``` 从左到右阅读这种串联方式,可以清晰地表达数据处理管道。

compactMap——映射并解包

```swift let strings = ["1","two","3","four","5"] let nums = strings.compactMap { Int($0) } // [1,3,5] ``` `compactMap` 会进行转换并移除空值结果,非常适合可能失败的转换。

flatMap——展平嵌套数组

```swift let nested = [[1,2,3],[4,5],[6]] let flat = nested.flatMap { $0 } // [1,2,3,4,5,6] let words = ["hello world","foo bar"] let all = words.flatMap { $0.split(separator: " ") } // ["hello","world","foo","bar"] ```

forEach——仅执行副作用

```swift [1, 2, 3].forEach { print($0) } ``` `forEach` 类似于 `for-in` 循环,但不能使用 `break` 或 `continue`。只有在需要执行副作用且不需要提前退出时,才应使用它。

使用归并操作构建字典

```swift let words = ["apple","banana","apricot","blueberry"] let grouped = words.reduce(into: [Character:[String]]()) { dict, word in let key = word.first! dict[key, default: []].append(word) } // ["a":["apple","apricot"],"b":["banana","blueberry"]] ```

用于提升性能的惰性链

```swift let lazyResult = (1...1_000_000) .lazy .filter { $0 % 7 == 0 } .map { $0 * 2 } .prefix(5) // No intermediate arrays created! ``` 在链的开头添加 `.lazy`,即可按需计算。

快速检查

哪个函数会转换每个元素,并移除空值结果?

回顾

要点总结: • `map`——将每个元素转换为新数组中的元素 • `filter`——保留符合谓词的元素 • `reduce`——将元素归并为一个累积值 • `compactMap`——转换并丢弃空值 • `flatMap`——转换并展平嵌套序列 • 与 `.lazy` 串联,以避免创建中间集合 下一课:二维数组和嵌套集合。

常见问题解答

「数组上的 Map、Filter 与 Reduce」课时是免费的吗?

是的 — 「数组上的 Map、Filter 与 Reduce」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Swift Academy 课程的其余内容,请升级到 CoddyKit PRO。 Swift Academy 课程共包含 4 节课。

「数组上的 Map、Filter 与 Reduce」这节课中我会学到什么?

使用函数式高阶函数转换数组 你通过在浏览器中直接运行的动手代码来练习 Swift Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。

学习 Swift Academy 需要有经验吗?

无需任何先前经验。CoddyKit 上的 Swift Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 3 节课,共 4 节。

「数组上的 Map、Filter 与 Reduce」课时需要多长时间?

大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。

我能在这节 Swift Academy 课中编写并运行代码吗?

能。每节 Swift Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。

此课程中的所有课时

  1. 创建和修改数组
  2. 排序、搜索与切片
  3. 数组上的 Map、Filter 与 Reduce
  4. 二维数组与嵌套集合
← 返回 Swift Academy