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