10 个版本
0.1.9 | 2023年1月6日 |
---|---|
0.1.8 | 2022年10月12日 |
0.1.7 | 2022年9月8日 |
0.1.6 | 2022年6月29日 |
0.1.2 | 2016年12月11日 |
#72 in 算法
101,941 每月下载量
在 246 个 crate (26 个直接使用) 中使用
97KB
3K SLoC
streaming-iterator
Rust 的流式迭代器。
许可
许可协议为以下之一
- Apache 许可协议 2.0 版,(LICENSE-APACHE 或 https://apache.ac.cn/licenses/LICENSE-2.0)
- MIT 许可协议 (LICENSE-MIT 或 http://opensource.org/licenses/MIT)
任选其一。
贡献
除非您明确表示,否则任何有意提交以包含在作品中的贡献,根据 Apache-2.0 许可协议定义,应按上述方式双许可,不附加任何额外条款或条件。
lib.rs
:
流式迭代器。
Rust 标准库中的迭代器 API 不允许产生从迭代器本身借用的元素。这意味着,例如,std::io::Lines
迭代器必须为每一行分配一个新的 String
,而不是重用内部缓冲区。相反,StreamingIterator
特性通过引用而不是值提供对正在迭代的元素访问。
StreamingIterator
不能用于 Rust 的 for
循环,但 while let
循环提供了相似级别的易用性
while let Some(item) = iter.next() {
// work with item
}
但是,请确保仅使用上述形式与现有迭代器的可变引用一起使用,而不是与创建迭代器的表达式一起使用。例如,以下代码将无限期地循环遍历数组的第一个元素
use streaming_iterator::{convert, StreamingIterator};
let array = [0, 1, 2, 3];
while let Some(item) = convert(array.iter()).next() {
// This is an infinite loop!
}
虽然标准 Iterator
特性的功能基于 next
方法,但 StreamingIterator
的功能基于一对方法:advance
和 get
。这实际上将 next
的逻辑分成两半(实际上,StreamingIterator
的 next
方法只是调用 advance
然后是 get
)。
这是由于 Rust 对借用(特别是缺少单入口、多出口借用)的词法处理所必需的。如果 StreamingIterator
被定义为像 Iterator
一样,只有一个必需的 next
方法,那么像 filter
这样的操作将无法定义。