You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
33 lines
784 B
33 lines
784 B
#![cfg(feature = "use_std")]
|
|
|
|
use std::collections::HashMap;
|
|
use std::hash::Hash;
|
|
use std::iter::Iterator;
|
|
|
|
/// Return a `HashMap` of keys mapped to a list of their corresponding values.
|
|
///
|
|
/// See [`.into_group_map()`](../trait.Itertools.html#method.into_group_map)
|
|
/// for more information.
|
|
pub fn into_group_map<I, K, V>(iter: I) -> HashMap<K, Vec<V>>
|
|
where I: Iterator<Item=(K, V)>,
|
|
K: Hash + Eq,
|
|
{
|
|
let mut lookup = HashMap::new();
|
|
|
|
iter.for_each(|(key, val)| {
|
|
lookup.entry(key).or_insert_with(Vec::new).push(val);
|
|
});
|
|
|
|
lookup
|
|
}
|
|
|
|
pub fn into_group_map_by<I, K, V>(iter: I, f: impl Fn(&V) -> K) -> HashMap<K, Vec<V>>
|
|
where
|
|
I: Iterator<Item=V>,
|
|
K: Hash + Eq,
|
|
{
|
|
into_group_map(
|
|
iter.map(|v| (f(&v), v))
|
|
)
|
|
}
|