zsw
4 months ago
5 changed files with 77 additions and 5 deletions
@ -0,0 +1,46 @@ |
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Map<S, List<T>> groupBy<S, T>(Iterable<T> values, S Function(T) key) { |
||||||
|
var map = <S, List<T>>{}; |
||||||
|
for (var element in values) { |
||||||
|
(map[key(element)] ??= []).add(element); |
||||||
|
} |
||||||
|
return map; |
||||||
|
} |
||||||
|
|
||||||
|
Map<String, int> groupCount<S, T>(Map<S, List<T>> values) { |
||||||
|
var map = <String, int>{}; |
||||||
|
for (var element in values.keys) { |
||||||
|
map["$element"] = values[element]?.length ?? 0; |
||||||
|
} |
||||||
|
return map; |
||||||
|
} |
||||||
|
|
||||||
|
Map<String, T> groupItem<S, T>(Map<S, List<T>> values) { |
||||||
|
var map = <String, T>{}; |
||||||
|
for (var element in values.keys) { |
||||||
|
if (values[element] == null) { |
||||||
|
continue; |
||||||
|
} |
||||||
|
map["$element"] = values[element].first; |
||||||
|
} |
||||||
|
return map; |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
extension ListExtension<S, T> on Iterable<T> { |
||||||
|
|
||||||
|
Map<S, List<T>> lGroupBy(S Function(T) key) { |
||||||
|
return groupBy(this, key); |
||||||
|
} |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
extension MapExtension<S, T> on Map<S, List<T>> { |
||||||
|
|
||||||
|
Map<String, int> get mGroupCount => groupCount(this); |
||||||
|
|
||||||
|
Map<String, T> get mGroupItem => groupItem(this); |
||||||
|
|
||||||
|
} |
Loading…
Reference in new issue