1 stable release
1.0.0 | Mar 9, 2023 |
---|
#1765 in Rust patterns
11KB
128 lines
MaxValues
Package, that allows you to effectively get max values out of any sequence
For full documentation, see this
Basic usage
The basic usage of this package looks like this
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]));
}
Beware, that MaxValues
struct doesn't guarantee any order of elements. That's why we're transforming it into hashset for assert_eq
macro.
Using iterator adaptor
Common pattern is to iterate through collection and push it elements to MaxValues
like this:
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]));
}
That's why MaxValues
implements 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]));
Also, you can use iterator extension trait MaxValuesIterExt
to iterate over max values of iterator:
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])
);
}
Dependencies
~69KB