#iterator #peekable #peek #multipeek

better_peekable

创建一个类似于 Rust 的 Peekable 结构,但允许预览 n 个项目。

6 个版本

0.2.4 2022 年 4 月 29 日
0.2.3 2022 年 4 月 19 日
0.1.3 2022 年 4 月 18 日

#1309数据结构

每月 21 次下载

Apache-2.0

8KB
97

更好的 Peekable

此软件包提供了一个 trait BetterPeekable 和一个类型 BPeekable<I: Iterator>,它是一个迭代器的包装器,通过在任何 Iterator 上调用 better_peekable() 返回。您可以在 BPeekable<I> 上调用通常的迭代器方法,就像在 I 上调用 next() 一样。您还可以调用 next_backsize_hintrposition 以及从 DoubleEndedIterator 中的其他一切,除了 peekpeek_n

peek 为您提供了一个引用,该引用指向可由 next() 调用消费的即将可用的项目,而 peek_n 允许您预览 n 次。调用 peek_n(0) 与调用 peek 相同。

peekpeek_n 是幂等的,这意味着在 BPeekable 上重复调用它们对底层迭代器或 BPeekable 的任何状态都没有影响。如果您发现违反此合同的问题,请提交问题。

用法

better_peekable 添加到您的 Cargo.toml

[dependencies]
better_peekable = "0.2.4"

我们将使用以下序列的 peekpeek_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

无运行时依赖