当前位置:嗨网首页>书籍在线阅读

18-迭代器

  
选择背景色: 黄橙 洋红 淡粉 水蓝 草绿 白色 选择字体: 宋体 黑体 微软雅黑 楷体 选择字体大小: 恢复默认

1.3.13 迭代器

迭代器是一种构造,它提供了一种高效访问集合类型元素的方法,不过它并不是一个新的概念。在许多命令式语言中,它们为从集合类型(例如list或map)构造的对象。例如,Python的iter(some_list)或者C++的vector.begin()是从现有集合构造迭代器的方法。迭代器的一个优点是它们提供了对集合中元素的更高级别抽象,而不是使用手动循环,因为后者很容易因为某个错误而终止执行。

迭代器的另一个优点它是不会在内存中读取整个集合,并且是惰性的。惰性表示迭代器仅在需要时对集合中的元素进行求值或访问。迭代器还可以与多个转换操作链接,例如根据相关条件过滤元素,并且在你需要之前不进行求值转换。当你需要访问这些元素时,迭代器会提供next()方法,该方法尝试从集合中读取下一个元素,这一操作会在迭代器进行链式计算求值时发生。

23.png 注意

只有在类型具有集合(语义)时,才有必要实现Iterator特征。例如,对于()单位类型实现Iterator特征是无意义的。

在Rust中,迭代器是实现了Iterator特征的任意类型。可以在for循环中使用迭代器来遍历其元素。它们是为大多数标准库集合类型实现的,例如vector、HashMap、BTreeMap等,并且还可以为自定义类型实现。

我们在Rust中处理集合类型时,经常会用到迭代器。事实上,Rust的for循环可以转换成一个普通的match表达式,其中包含对迭代器对象next()方法的调用。此外,我们可以通过调用其中的iter()或者into_iter()方法将大多数集合类型转换为迭代器。上述内容已经提供了与迭代器相关的足够多的信息,以便我们进行接下来的练习。我们将会在第7章深入介绍迭代器,并实现一个自定义迭代器。