grouping_by

Crates.iogrouping_by
lib.rsgrouping_by
version0.2.2
sourcesrc
created_at2020-06-28 18:26:18.527006
updated_at2021-09-22 19:57:08.070669
descriptionA simple library which allows the user to group an iterator by various ways.
homepage
repositoryhttps://github.com/Davichet-e/grouping-by
max_upload_size
id259163
size18,743
(Davichet-e)

documentation

README

grouping-by

Crates.io Documentation

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.

Commit count: 18

cargo fmt