3 个不稳定版本
| 0.3.1 | 2024年6月26日 |
|---|---|
| 0.3.0 | 2024年6月26日 |
| 0.2.0 | 2023年6月22日 |
| 0.1.2 |
|
#357 in Rust 模式
每月 31 次下载
39KB
759 行
交替迭代器
这个 crate 旨在提供一个方便的方法,在两个迭代器的项目之间交替。它允许您以交替的方式迭代两个迭代器,将它们的元素组合成一个单一序列。
为了最简单地使用这个 crate,将 AlternatingExt trait 带入作用域
use alternating_iter::AlternatingExt;
并使用 alternate_with_all 方法创建新的交替迭代器。
use alternating_iter::AlternatingExt;
let a = [1, 2];
let b = [3, 4, 5];
let mut iter = a.iter().alternate_with_all(b.iter());
assert_eq!(iter.next(), Some(&1)); // `a` first
assert_eq!(iter.next(), Some(&3)); // `b`
assert_eq!(iter.next(), Some(&2)); // `a`
assert_eq!(iter.next(), Some(&4)); // `b`
assert_eq!(iter.next(), Some(&5)); // also `b`
assert_eq!(iter.next(), None);
默认情况下,alternate_with_all 方法创建一个迭代器,首先从 a 返回一个元素,然后是来自 b 的一个元素,依此类推,直到两者都用完。
在耗尽后停止
然而,如果您希望迭代在任一迭代器耗尽时停止,可以使用由 AlternatingExt trait 提供的 alternate_with_no_remainder 方法。此方法返回一个迭代器,在需要从单个迭代器连续返回多个项目时停止。
use alternating_iter::AlternatingExt;
let a = [1, 2];
let b = [3, 4, 5];
let mut iter = a.iter().alternate_with_no_remainder(b.iter());
assert_eq!(iter.next(), Some(&1)); // `a` first
assert_eq!(iter.next(), Some(&3)); // `b`
assert_eq!(iter.next(), Some(&2)); // `a`
assert_eq!(iter.next(), Some(&4)); // `b`
assert_eq!(iter.next(), None); // remaining items from `b` are not returned
迭代在第四个元素后停止,因为从 b 返回第五个元素会破坏交替模式。
耗尽后继续交替
如果 alternate_with_all 的行为不可取,并且您希望在迭代器耗尽后继续交替,请使用三个迭代器中最简单的一个:alternate_with。
use alternating_iter::AlternatingExt;
let a = [1, 2];
let b = [3, 4, 5];
let mut iter = a.iter().alternate_with(b.iter());
assert_eq!(iter.next(), Some(&1)); // `a` first
assert_eq!(iter.next(), Some(&3)); // `b`
assert_eq!(iter.next(), Some(&2)); // `a`
assert_eq!(iter.next(), Some(&4)); // `b`
assert_eq!(iter.next(), None); // `a` exhausted
assert_eq!(iter.next(), Some(&5)); // `b`
assert_eq!(iter.next(), None); // `b` exhausted
迭代器将简单地盲目交替,因此如果其中一个输入迭代器比另一个大,则 Some 可以出现在 None 之间。
变更日志
- 0.2: 重命名扩展 trait 中的方法,并修复了错误的
FusedIterator实现 - 0.3: 移除了错误的
FixedSizedIterator实现