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
实现