aboutsummaryrefslogtreecommitdiff
path: root/src/group_map.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/group_map.rs')
-rw-r--r--src/group_map.rs18
1 files changed, 14 insertions, 4 deletions
diff --git a/src/group_map.rs b/src/group_map.rs
index be9f842..4231de0 100644
--- a/src/group_map.rs
+++ b/src/group_map.rs
@@ -14,9 +14,19 @@ pub fn into_group_map<I, K, V>(iter: I) -> HashMap<K, Vec<V>>
{
let mut lookup = HashMap::new();
- for (key, val) in iter {
- lookup.entry(key).or_insert(Vec::new()).push(val);
- }
+ iter.for_each(|(key, val)| {
+ lookup.entry(key).or_insert_with(Vec::new).push(val);
+ });
lookup
-} \ No newline at end of file
+}
+
+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))
+ )
+}