Rust 程序设计(第 2 版)
Jim Blandy, Jason Orendorff, Leonora F. S. Tindall
软件工程师
1469 人已学习
立即订阅
登录后,你可以任选4讲全文学习
推荐试读
换一换
课程目录
已完结/共 41 讲
时长 02:41
时长 06:30
时长 10:04
时长 01:05
时长 50:06
时长 31:35
时长 34:39
时长 29:11
时长 37:15
时长 23:44
时长 44:19
时长 29:54
时长 39:01
时长 01:38
时长 01:15
时长 00:37
Rust 程序设计(第 2 版)
15
15
1.0x
00:00/00:00
登录|注册

第 15 章 迭代器(1)

漫长的一天结束了。
——Phil
迭代器是一个值,它可以生成一系列值,通常用来执行循环操作。Rust 的标准库不仅提供了用于遍历向量、字符串、哈希表和其他集合的迭代器,还提供了“从输入流中产生文本行”“从网络服务器中产生新的入站连接”“从通信通道中其他线程接收的值”等迭代器。当然,你也可以出于自己的目的实现迭代器。Rust 的 for 循环为使用迭代器提供了一种自然的语法,但迭代器本身也提供了一组丰富的方法,比如映射(map)、过滤(filter)、连接(join)、收集(collect)等。
Rust 的各种迭代器灵活、富有表现力而且高效。考虑以下函数,它会返回前 n 个正整数之和(通常称为n 个三角形数):
fn triangle(n: i32) -> i32 {
let mut sum = 0;
for i in 1..=n {
sum += i;
}
sum
}
表达式 1..=n 是一个 RangeInclusive<i32> 型的值。而 RangeInclusive<i32> 是一个迭代器,可以生成其起始值到结束值(包括两者)之间的整数,因此你可以将它用作 for 循环的操作数来对从 1n 的值求和。
但是迭代器还有一个 fold 方法,可以实现完全一样的效果:
fn triangle(n: i32) -> i32 {
(1..=n).fold(0, |sum, item| sum + item)
}
开始运行时以 0 作为总和,fold 会获取 1..=n 生成的每个值,并以总和(sum)跟当前值(item)为参数调用闭包 |sum, item| sum + item。闭包的返回值会作为新的总和。它返回的最后一个值就是 fold 自身要返回的值——在这个例子中,也就是整个序列的总和。如果你用惯了 for 循环和 while 循环,这种写法可能看起来很奇怪,但一旦习惯了 fold,你就会发现 fold 的表达方式更加清晰和简洁。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

Rust 迭代器是 Rust 语言中的重要概念,它能够生成一系列值并用于执行循环操作。除了用于遍历向量、字符串、哈希表等集合,Rust 的标准库还提供了多种迭代器,如从输入流中产生文本行、从网络服务器中产生新的入站连接等。迭代器提供了丰富的方法,如映射、过滤、连接、收集等。文章介绍了迭代器的基本概念,包括迭代器特型和 IntoIterator 特型,以及如何创建自定义类型的迭代器。此外,文章还介绍了 Rust 的 for 循环如何与迭代器结合使用,以及如何通过迭代器来遍历集合类型。迭代器在 Rust 中被广泛应用,熟悉其工具对于掌握这门语言至关重要。文章还强调了 Rust 的迭代器经过精心设计,以确保编译器可以将其翻译成优秀的机器码,同时展示了迭代器在重度使用时的高效性。除此之外,文章还介绍了 IntoIterator 的实现方式,以及 from_fn 和 successors 方法的使用。总体而言,本文深入浅出地介绍了 Rust 迭代器的重要性和灵活性,对于想要深入了解 Rust 语言特性的读者来说,是一篇不可多得的好文。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《Rust 程序设计(第 2 版)》
立即购买
登录 后留言

精选留言

由作者筛选后的优质留言将会公开显示,欢迎踊跃留言。
收起评论
显示
设置
留言
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部