#iterator-extension #values #max #traits #getting

max_values

用于从给定序列中获取最大值的结构体和迭代器扩展特质。

1 个稳定版本

1.0.0 2023年3月9日

1775Rust 模式

MIT 许可协议

11KB
128

MaxValues

包,允许您从任何序列中有效获取最大值

有关完整文档,请参阅 此处

基本用法

此包的基本用法如下

use max_values::MaxValues;

fn main() {
    let mut values = MaxValues::<i32, 3>::new();
    values.push(2);
    assert_eq!(values.as_ref(), [2]);

    values.push(3);
    values.push(4);
    assert_eq!(values.iter().copied().collect::<HashSet<_>>(), HashSet::from([2, 3, 4]));

    values.push(1);
    assert_eq!(values.iter().copied().collect::<HashSet<_>>(), HashSet::from([2, 3, 4]));

    values.push(5);
    assert_eq!(values.iter().copied().collect::<HashSet<_>>(), HashSet::from([3, 4, 5]));

    values.push(4);
    assert_eq!(values.iter().copied().collect::<HashSet<_>>(), HashSet::from([4, 4, 5]));
}

请注意,MaxValues 结构体不保证任何元素顺序。这就是为什么我们将其转换为哈希集合以用于 assert_eq 宏。

使用迭代器适配器

常见的模式是遍历集合,并将元素推送到 MaxValues,如下所示

use max_values::MaxValues;

fn main() {
    let arr = [0, 1, 5, 7, 2, 3];

    let values = MaxValues::<i32, 3>::new();
    for i in arr {
        values.push(i);
    }

    assert_eq!(values.into_iter().collect::<HashSet<_>>, HashSet::from([3, 5, 7]));
}

因此,MaxValues 实现了 FromIterable<T>

let arr = [0, 1, 5, 7, 2, 3];
let values = MaxValues::<i32, 3>::from_iter(arr.into_iter());
assert_eq!(values.into_iter().collect::<HashSet<_>>(), HashSet::from([3, 5, 7]));

此外,您还可以使用迭代器扩展特质 MaxValuesIterExt 来遍历迭代器的最大值

use max_values::MaxValuesIterExt;

fn main() {
    let values = [1, 5, 2, 4, 7, 10, 0, 15, 3];
    assert_eq!(
        values.into_iter().max_values::<3>().collect::<HashSet<_>>(),
        HashSet::from([7, 10, 15])
    );
}

依赖项

~66KB