迭代器是一种构造,它提供了一种高效访问集合类型元素的方法,不过它并不是一个新的概念。在许多命令式语言中,它们为从集合类型(例如 list
或 map
)构造的对象。例如,Python
的 iter
(some_list
)或者 C++
的 vector.begin()
是从现有集合构造迭代器的方法。迭代器的一个优点是它们提供了对集合中元素的高级别抽象,而不是使用手动循环,因为后者很容易因为某个错误而终止执行。
迭代器的另一个优点它是不会在内存中读取整个集合,并且是惰性的。惰性表示迭代器仅在需要时对集合中的元素进行求值或访问。迭代器还可以与多个转换操作链接,例如根据相关条件过滤元素,并且在你需要之前不进行求值转换。当你需要访问这些元素时,迭代器会提供 next()
方法,该方法尝试从集合中读取下一个元素,这一操作会在迭代器进行链式计算求值时发生。
:::info 注意
只有在类型具有集合(语义)时,才有必要实现 Iterator
特征。例如,对于()
单位类型实现 Iterator
特征是无意 义的。
:::
在 Rust 中,迭代器是实现了 Iterator
特征的任意类型。可以在 for
循环中使用迭代器来 遍历其元素。它们是为大多数标准库集合类型实现的,例如 vector
、HashMap
、BTreeMap
等,并且还可以为自定义类型实现。
我们在 Rust 中处理集合类型时,经常会用到迭代器。事实上,Rust 的 for
循环可以转 换成一个普通的 match
表达式,其中包含对迭代器对象 next()
方法的调用。此外,我们可以 通过调用其中的 iter()
或者 into_iter()
方法将大多数集合类型转换为迭代器。