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 章 迭代器(2)

15.3 迭代器适配器

一旦你手头有了迭代器,迭代器的 Iterator 特型就会提供大量适配器方法(也可以简称为适配器)。适配器会消耗某个迭代器并构建一个实现了特定行为的新迭代器。为了阐明适配器的工作原理,我们将从两个最流行的适配器 mapfilter 开始,然后介绍其他适配器,涵盖了你能想到的从其他序列生成值序列的几乎所有方式:截断、跳过、组合、反转、连接、重复等。

15.3.1 mapfilter

Iterator 特型的 map(映射)适配器能针对迭代器的各个条目调用闭包来帮你转换迭代器。filter 适配器能使用闭包来帮你从迭代器中过滤某些条目,由闭包决定保留和丢弃哪些条目。
假设你正在逐行遍历文本并希望去掉每一行的前导空格和尾随空格。标准库的 str::trim 方法能从单个 &str 中丢弃前导空格和尾随空格,返回一个新的、修剪过的 &str 借用。你可以通过 map 适配器将 str::trim 应用于迭代器中的每一行:
let text = " ponies \n giraffes\niguanas \nsquid".to_string();
let v: Vec<&str> = text.lines()
.map(str::trim)
.collect();
assert_eq!(v, ["ponies", "giraffes", "iguanas", "squid"]);
text.lines() 调用会返回一个生成字符串中各行的迭代器。在该迭代器上调用 map 会返回第二个迭代器,第二个迭代器会对每一行调用 str::trim 并将生成的结果作为自己的条目。最后,collect 会将这些条目收集到一个向量中。
map 返回的迭代器本身当然也可以进一步适配。如果你想将结果中的 iguanas 排除,可以这样写:
let text = " ponies \n giraffes\niguanas \nsquid".to_string();
let v: Vec<&str> = text.lines()
.map(str::trim)
.filter(|s| *s != "iguanas")
.collect();
assert_eq!(v, ["ponies", "giraffes", "squid"]);
在这里,filter 会返回第三个迭代器,它只会从 map 迭代器的结果中生成闭包 |s| *s != "iguanas" 返回 true 的那些条目。迭代器的适配器链条就像 Unix shell 中的管道:每个适配器都有单一用途,并且很清楚此序列是如何在从左到右读取时进行转换的。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

Rust中的迭代器适配器是强大的工具,能够帮助开发者对迭代器进行转换和过滤,生成新的迭代器。本文介绍了常用的适配器,包括`map`、`filter`、`filter_map`、`flat_map`和`flatten`,展示了它们在处理文本行、过滤特定条目、展平嵌套结构等操作中的灵活运用。文章强调了适配器的零成本抽象特性,使用适配器不会增加额外开销。此外,还介绍了`take`、`take_while`、`skip`、`skip_while`、`peekable`和`fuse`等适配器的功能和用法,丰富了读者对迭代器适配器的理解和应用。 文章还探讨了可逆迭代器、`inspect`、`chain`、`enumerate`和`zip`等适配器的特性和使用场景,为读者提供了全面的迭代器适配器知识。此外,介绍了一些高级的迭代器方法,如`by_ref`、`cloned`、`copied`和`cycle`,以及消耗迭代器的方法,如`count`、`sum`、`product`、`min`和`max`,丰富了读者对迭代器的操作和处理方式的认识,为他们提供了更多灵活和高效的编程工具。 总的来说,本文为Rust开发者提供了深入了解和灵活运用迭代器适配器的重要参考价值,同时也为他们展示了更多高级的迭代器操作方法,帮助他们更好地利用Rust语言的特性进行编程。文章展示了迭代器的强大功能和灵活运用,为读者提供了丰富的技术知识和实用工具。

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

精选留言

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