1 个不稳定版本

使用旧的 Rust 2015

0.1.0 2018年6月24日

#27#intersection

Apache-2.0 OR MIT

27KB
526

交集计算的快速迭代器变体。

用法

将此添加到您的 Cargo.toml

[dependencies]
skipping-search = "0.1.0"

并添加到您的 crate 根目录

extern crate skipping_search;

lib.rs:

skipping-search 是交集计算的快速迭代器变体。

示例

假设您想找到4个不同数字的最小公倍数,并且您忘记了生成它的有效方法。您可以收集每个数的倍数的大数组,然后使用此crate高效地交集它们。

use skipping_search::{SkippingIterator, MultiIntersection, CountingIntersection};

let multiples = vec![12, 16, 22, 35].into_iter().map(|n|{
    (1..).map(|i|{i * n}).take_while(|p|{p < &100_000}).collect::<Vec<_>>()
}).collect::<Vec<_>>();

let mut common_multiples = SkippingIterator::new(
    MultiIntersection::new(
        // Collect each vector as a slice.
        multiples.iter().map(Vec::as_slice).collect(),
    ),
);

assert_eq!(common_multiples.cloned().next(), Some(18480));

现在我们已经支付了生成这些数据的成本,我们可以以非常低的成本进行其他组合查询

#
#
#
let mut subcommon_multiples = SkippingIterator::new(
    CountingIntersection::new(
        // Collect each vector as a slice.
        multiples.iter().map(Vec::as_slice).collect(),
        // We want any multiple common to at least 3 of the numbers
        3,
    ),
);

assert_eq!(
    subcommon_multiples.cloned().take(10).collect::<Vec<_>>(),
    vec![528, 1056, 1584, 1680, 2112, 2640, 3168, 3360, 3696, 4224],
);

无运行时依赖