#peek #iterator #iterator-adapter #element #cursor #future #advancing

no-std multipeek

一个适配器,可以在不移动迭代器游标的情况下预览迭代器中的后续元素

3 个版本

0.1.2 2022年4月17日
0.1.1 2022年4月17日
0.1.0 2022年4月17日

1380数据结构

Download history 12/week @ 2024-03-15 25/week @ 2024-03-22 58/week @ 2024-03-29 26/week @ 2024-04-05 28/week @ 2024-04-12 27/week @ 2024-04-19 24/week @ 2024-04-26 14/week @ 2024-05-03 11/week @ 2024-05-10 20/week @ 2024-05-17 19/week @ 2024-05-24 18/week @ 2024-05-31 12/week @ 2024-06-07 16/week @ 2024-06-14 20/week @ 2024-06-21 6/week @ 2024-06-28

58 每月下载量
limo 中使用

MIT/Apache

15KB
61

multipeek



一个迭代器适配器,可以在不移动底层迭代器游标的情况下预览后续元素。

查看文档以获取更多详细信息。

示例

use multipeek::multipeek;

let mut iter = multipeek([1, 2, 3, 4].into_iter());

// Peek at the first element.
let first_peek = iter.peek().cloned();
assert_eq!(first_peek, Some(1));

// Advance the iterator cursor to point at the first element.
let first = iter.next();
assert_eq!(first, first_peek);

// Peek two steps ahead, at the third element.
let third_peek = iter.peek_nth(1).cloned();
assert_eq!(third_peek, Some(3));

// Advance the iterator cursor twice. 
// The iterator cursor will now point to the third element.
iter.next();
let third = iter.next();
assert_eq!(third_peek, third);

// Peeking beyond the end of the iterator returns `None`.
let ambitious_peek = iter.peek_nth(5);
assert!(ambitious_peek.is_none());

no_std

multipeek 可用于 no_std 环境。它需要一个分配器。

替代品和先前艺术

Rust 的标准库提供了 Peekable
它允许你预览迭代器中的下一个元素,但无法进一步查看。

itertools 提供了 MultiPeek
它允许你预览到你想要的任何位置,但 MultiPeek::peek 不是幂等的:调用一次 peek 返回下一个元素,再次调用 peek 返回第二个元素。

multipeek,就像 itertools 一样,提供了预览任何远距离的选项。
我们的 MultiPeek::peek 实现是幂等的:MultiPeek::peek 总是返回下一个元素。
你可以使用 MultiPeek::peek_nth 进一步预览,只需指定你想要查看多少步之外的元素。

我们的 MultiPeek 实现直接受到 itertools 实现的启发。

许可

根据您的选择,许可为 Apache License,Version 2.0 或 MIT 许可。除非您明确说明,否则您有意提交以包含在本软件包中的任何贡献,根据 Apache-2.0 许可,应按上述方式双重许可,而无需任何其他条款或条件。

无运行时依赖项