Swift Academy · 课时

用于提升效率的惰性序列

使用 .lazy 延迟计算,避免创建中间数组。

第 4 / 4 课12 个步骤

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

欢迎

惰性序列会将计算推迟到需要结果时执行,因此在链式操作中可以避免创建中间数组。

急切求值的问题

```swift let result = (1...1_000_000) .filter { $0 % 7 == 0 } // creates array of ~142857 elements .map { $0 * 2 } // creates another 142857-element array .prefix(5) // Wasteful — only 5 elements needed! ```

添加 .lazy

```swift let result = (1...1_000_000) .lazy .filter { $0 % 7 == 0 } .map { $0 * 2 } .prefix(5) // Only computes what prefix(5) needs — no intermediate arrays! print(Array(result)) // [14,28,42,56,70] ```

惰性集合类型

在序列上调用 `.lazy` 时,Swift 会返回一个包装该序列的 `LazySequence`: ```swift let lazyArr = [1,2,3].lazy // LazySequence<[Int]> let lazyMap = lazyArr.map { $0*2 } // LazyMapSequence ```

惰性求值的适用场景

惰性求值适用于以下情况: • 只需要大型序列的前缀 • 数据源是无限的(例如自定义生成器) • 需要对大型集合执行多个转换的链式操作

无限序列

```swift struct Fibonacci: Sequence { func makeIterator() -> some IteratorProtocol { var a = 0, b = 1 return AnyIterator { let next = a; a = b; b = next + b; return next } } } let first10 = Array(Fibonacci().prefix(10)) ```

使用按条件查找第一个元素的惰性处理

```swift let firstEven = (1...Int.max) .lazy .first { $0 % 2 == 0 } // Returns 2 immediately — doesn't iterate the whole range ```

强制求值

要将惰性序列具体化,请用数组进行包装: ```swift let eager = Array((1...100).lazy.filter { $0 % 3 == 0 }.map { $0*2 }) ```

惰性求值并不总是更好

对于小型集合,惰性处理会因包装类型而产生额外开销。在每条链中都应用 `.lazy` 之前,请先进行基准测试。当集合很大且需要提前终止时,再使用它。

自定义惰性生成器

```swift func naturals() -> AnyIterator { var n = 0 return AnyIterator { n += 1; return n } } Array(naturals().prefix(5)) // [1,2,3,4,5] ```

快速检查

在集合链前加上 `.lazy` 前缀有什么作用?

回顾

要点: • `.lazy` 会将映射和筛选计算推迟到序列被消费时 • 避免分配中间数组 • 当只需要大型序列的前缀时非常有用 • 与 `prefix`、`first(where:)` 结合,实现提前终止 • 需要时使用 `Array(lazySeq)` 将序列具体化 课程完成!
免费开始

用 AI 导师学习 Swift — 免费

在浏览器中编写并运行真实代码,获得全天候 AI 导师的即时帮助,并在网页或应用中继续学习。

课程
122
课程
409

常见问题解答

「用于提升效率的惰性序列」课时是免费的吗?

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

「用于提升效率的惰性序列」这节课中我会学到什么?

使用 .lazy 延迟计算,避免创建中间数组。 你通过在浏览器中直接运行的动手代码来练习 Swift Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。

学习 Swift Academy 需要有经验吗?

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

「用于提升效率的惰性序列」课时需要多长时间?

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

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

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

此课程中的所有课时

  1. 纯函数与无副作用设计
  2. 高阶函数:map、flatMap、compactMap
  3. 函数组合与数据管道
  4. 用于提升效率的惰性序列
← 返回 Swift Academy