10 releases
0.2.2 | Sep 22, 2021 |
---|---|
0.2.1 | Aug 5, 2020 |
0.1.7 | Jul 15, 2020 |
0.1.5 | Jun 30, 2020 |
#976 in Rust patterns
343 downloads per month
14KB
137 lines
grouping-by
This small library provides users the possibility of grouping their iterators of various ways. It is still in development and therefore is not recommended for production code. There will be breaking changes constantly.
It is similar to Java Collectors.groupingBy
Example:
#[derive(Debug, PartialEq)]
struct Point {
x: i32,
y: i32,
}
let array: [Point; 4] = [
Point { x: 1, y: 2 },
Point { x: 1, y: 3 },
Point { x: 2, y: 2 },
Point { x: 2, y: 2 },
];
assert_eq!(
[
(1, vec![&Point { x: 1, y: 2 }, &Point { x: 1, y: 3 }]),
(2, vec![&Point { x: 2, y: 2 }, &Point { x: 2, y: 2 }])
]
.iter()
.cloned()
.collect::<HashMap<i32, Vec<&Point>>>(),
array.iter().grouping_by(|point| point.x)
);
More advanced usage
// This returns for each year, the contract with the most days.
contracts.iter().grouping_by_max(
|contract| contract.date.year(), // Key of HashMap
|contract1, contract2| contract1.days.cmp(&contract2.days), // Comparator to get the max
) // Returns `HashMap<i32, Contract>`
Usage
Just import the trait (use grouping_by::GroupingBy;
) into your crate and use it on your iterators.