6 个版本
0.2.4 | 2022 年 4 月 29 日 |
---|---|
0.2.3 | 2022 年 4 月 19 日 |
0.1.3 | 2022 年 4 月 18 日 |
#1309 在 数据结构
每月 21 次下载
8KB
97 行
更好的 Peekable
此软件包提供了一个 trait BetterPeekable
和一个类型 BPeekable<I: Iterator>
,它是一个迭代器的包装器,通过在任何 Iterator
上调用 better_peekable()
返回。您可以在 BPeekable<I>
上调用通常的迭代器方法,就像在 I
上调用 next()
一样。您还可以调用 next_back
、size_hint
和 rposition
以及从 DoubleEndedIterator
中的其他一切,除了 peek
和 peek_n
。
peek
为您提供了一个引用,该引用指向可由 next()
调用消费的即将可用的项目,而 peek_n
允许您预览 n
次。调用 peek_n(0)
与调用 peek
相同。
peek
和 peek_n
是幂等的,这意味着在 BPeekable
上重复调用它们对底层迭代器或 BPeekable
的任何状态都没有影响。如果您发现违反此合同的问题,请提交问题。
用法
将 better_peekable
添加到您的 Cargo.toml
。
[dependencies]
better_peekable = "0.2.4"
我们将使用以下序列的 peek
和 peek_n
调用来测试 BPeekable
的幂等性。
// Required for peek and peek_n
use better_peekable::BetterPeekable;
fn main() {
let vec = vec![
String::from("Hello"),
String::from("World"),
String::from("It's a nice day to make"),
String::from("A better peekable iterator adaptor"),
String::from("Peek_N and Peek are supposed to be"),
String::from("Idempotent Methods"),
];
let mut iter = vec.into_iter();
let mut better_peeker = iter.better_peekable();
assert_eq!(better_peeker.peek(), Some(&"Hello".to_string()));
assert_eq!(better_peeker.peek(), Some(&"Hello".to_string()));
assert_eq!(better_peeker.peek(), Some(&"Hello".to_string()));
assert_eq!(better_peeker.peek_n(1), Some(&"World".to_string()));
assert_eq!(better_peeker.next(), Some("Hello".to_string()));
assert_eq!(better_peeker.next(), Some("World".to_string()));
assert_eq!(
better_peeker.peek(),
Some(&"It's a nice day to make".to_string())
);
assert_eq!(
better_peeker.peek_n(0),
Some(&"It's a nice day to make".to_string())
);
assert_eq!(
better_peeker.peek_n(1),
Some(&"A better peekable iterator adaptor".to_string())
);
assert_eq!(
better_peeker.nth(1),
Some("A better peekable iterator adaptor".to_string())
);
assert_eq!(
better_peeker.peek_n(1),
Some(&"Idempotent Methods".to_string())
);
变更日志 0.2.4
从 Iterator::Item
中移除了 trait 约束 std::fmt::Debug