@@ -54,6 +54,8 @@ function mapFromIterable(iterable $iterable, callable $mapper): Map
54
54
}
55
55
56
56
/**
57
+ * @deprecated Use {@link mappedSetsFromIterable} instead
58
+ *
57
59
* @param iterable<K, V> $iterable
58
60
* @param callable(K, V): Pair<KReturn, VReturn> $mapper
59
61
*
@@ -84,6 +86,37 @@ function mappedValueSetsFromIterable(iterable $iterable, callable $mapper): Map
84
86
return $ map ;
85
87
}
86
88
89
+ /**
90
+ * @param iterable<K, V> $iterable
91
+ * @param callable(K, V): Pair<KReturn, VReturn> $mapper
92
+ *
93
+ * @return Map<KReturn, Set<VReturn>>
94
+ *
95
+ * @template K
96
+ * @template V
97
+ * @template KReturn
98
+ * @template VReturn
99
+ */
100
+ function mappedSetsFromIterable (iterable $ iterable , callable $ mapper ): Map
101
+ {
102
+ /** @var Map<KReturn, Set<VReturn>> $map */
103
+ $ map = new Map ();
104
+
105
+ foreach ($ iterable as $ key => $ value ) {
106
+ $ keyValue = $ mapper ($ key , $ value );
107
+ $ set = $ map ->get ($ keyValue ->key , null );
108
+ if ($ set === null ) {
109
+ /** @var Set<VReturn> $set */
110
+ $ set = new Set ();
111
+ $ map ->put ($ keyValue ->key , $ set );
112
+ }
113
+
114
+ $ set ->add ($ keyValue ->value );
115
+ }
116
+
117
+ return $ map ;
118
+ }
119
+
87
120
/**
88
121
* @param iterable<K, V> $iterable
89
122
* @param callable(K,V): VReturn $mapper
0 commit comments