Skip to content

A simple library which allows the user to group an iterator in various ways.

License

Notifications You must be signed in to change notification settings

Davichet-e/grouping-by

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

18 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

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.

About

A simple library which allows the user to group an iterator in various ways.

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages