1 个不稳定版本
0.1.0 | 2020年8月2日 |
---|
#1905 在 Rust 模式
32KB
665 行(不含注释)
cor_iter
一个相关联的迭代器,其中两个迭代器轮流返回不同数量的项。
使用方法
将以下行放入 cargo.toml
cor_iter = "*"
使用 trait Correlate
和 enum Either
.
use cor_iter::{Correlate, Either};
它将为实现 core::iter::IntoIterator
的任何东西提供两个方法。
第一个方法是 linear_correlate
。参数 a
确定在从另一个迭代器返回值之前要返回的对象数量。如果 a
为正,则表示主迭代器的数量。如果 a
为负,则表示次要迭代器的数量。
参数 b
确定从迭代器返回的第一个绝对值为 b
项。如果 b
为正,则表示来自主迭代器的第一个绝对值为 b
的项。如果 b
为负,则表示来自次要迭代器的第一个绝对值为 b
的项。
// First 12 object came from `vec_obj1` because `b` is 2 and `a` is 10.
// Object 13 came from `vec_obj2`. Object 14 - 24 then came from `vec_obj1`
// then object 25 came from `vec_obj2`. Object 26 - 36 then came from `vec_obj1` and so on.
vec_obj1.linear_correlate(vec_obj2, 10, 2).for_each(|result| {
match result {
Either::Primary(p) => {
// do something with object from `vec_obj1`
},
Either::Secondary(s) => {
// do something with obj from `vec_obj2`
}
}
});
第二个方法是 correlate_with
。它接受一个闭包,如果它返回 true
,则下一个值将来自主迭代器。如果闭包返回 false
,则下一个值将来自次要迭代器。
// Keep iterate on primary iterator while the value is less than 5 then it yield from secondary iterator.
// It will keep iterate on secondary iterator until value is greater than -5 then it yield from primary iterator.
vec_1.iter().correlate_with(&vec_2, |current| {
match current {
Either::Primary(p) => {
**p < 5 // when current p is >= 5, it mean that it's consume up to this **p value
},
Either::Secondary(s) => {
**s > -5 // when current p is > -5, it mean that it's consume up to this **p value
}
}
}).for_each(|result| {
match result {
Either::Primary(p) => {
// do something with value from vec_1
},
Either::Secondary(s) => {
// do something with value from vec_2
}
}
});
注意事项
correlate_with
方法将返回一个迭代器,其第一个值将始终来自左侧迭代器。与 linear_correlate
不同,其中负 b
使迭代器的第一个 b
值来自右侧。
依赖关系
~155KB