第 15 章 迭代器(1)
吉姆•布兰迪
漫长的一天结束了。
——Phil
迭代器是一个值,它可以生成一系列值,通常用来执行循环操作。Rust 的标准库不仅提供了用于遍历向量、字符串、哈希表和其他集合的迭代器,还提供了“从输入流中产生文本行”“从网络服务器中产生新的入站连接”“从通信通道中其他线程接收的值”等迭代器。当然,你也可以出于自己的目的实现迭代器。Rust 的 for 循环为使用迭代器提供了一种自然的语法,但迭代器本身也提供了一组丰富的方法,比如映射(map)、过滤(filter)、连接(join)、收集(collect)等。
Rust 的各种迭代器灵活、富有表现力而且高效。考虑以下函数,它会返回前 n 个正整数之和(通常称为第 n 个三角形数):
表达式 1..=n 是一个 RangeInclusive<i32> 型的值。而 RangeInclusive<i32> 是一个迭代器,可以生成其起始值到结束值(包括两者)之间的整数,因此你可以将它用作 for 循环的操作数来对从 1 到 n 的值求和。
但是迭代器还有一个 fold 方法,可以实现完全一样的效果:
开始运行时以 0 作为总和,fold 会获取 1..=n 生成的每个值,并以总和(sum)跟当前值(item)为参数调用闭包 |sum, item| sum + item。闭包的返回值会作为新的总和。它返回的最后一个值就是 fold 自身要返回的值——在这个例子中,也就是整个序列的总和。如果你用惯了 for 循环和 while 循环,这种写法可能看起来很奇怪,但一旦习惯了 fold,你就会发现 fold 的表达方式更加清晰和简洁。
公开
同步至部落
取消
完成
0/2000
笔记
复制
AI
- 深入了解
- 翻译
- 解释
- 总结
![](https://static001.geekbang.org/resource/image/d0/e4/d0880927e2a522a038be2d04bf19dfe4.png)
Rust 迭代器是 Rust 语言中的重要概念,它能够生成一系列值并用于执行循环操作。除了用于遍历向量、字符串、哈希表等集合,Rust 的标准库还提供了多种迭代器,如从输入流中产生文本行、从网络服务器中产生新的入站连接等。迭代器提供了丰富的方法,如映射、过滤、连接、收集等。文章介绍了迭代器的基本概念,包括迭代器特型和 IntoIterator 特型,以及如何创建自定义类型的迭代器。此外,文章还介绍了 Rust 的 for 循环如何与迭代器结合使用,以及如何通过迭代器来遍历集合类型。迭代器在 Rust 中被广泛应用,熟悉其工具对于掌握这门语言至关重要。文章还强调了 Rust 的迭代器经过精心设计,以确保编译器可以将其翻译成优秀的机器码,同时展示了迭代器在重度使用时的高效性。除此之外,文章还介绍了 IntoIterator 的实现方式,以及 from_fn 和 successors 方法的使用。总体而言,本文深入浅出地介绍了 Rust 迭代器的重要性和灵活性,对于想要深入了解 Rust 语言特性的读者来说,是一篇不可多得的好文。
仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《Rust 程序设计(第 2 版)》
《Rust 程序设计(第 2 版)》
立即购买
登录 后留言
精选留言
由作者筛选后的优质留言将会公开显示,欢迎踊跃留言。
收起评论