groupBy<K, V> method
通过keySelector函数定义的键将列表中的元素分组到 map 中。
valueTransform 用于重新设置 map 中的值
举例:
var map = [1, 2, 3, 97, 98, 99].groupBy((n) => n < 10 ? 'smallNumbers' : 'largeNumbers')
// map = {'smallNumbers': [1, 2, 3], 'largeNumbers': [97, 98, 99]}
List<Person> persons = [
Person(name: 'John', age: 21),
Person(name: 'Carl', age: 18),
Person(name: 'Peter', age: 56),
Person(name: 'Sarah', age: 61)
];
var map = persons.groupBy((p) => p.age < 40 ? 'young' : 'old',
valueTransform: (p) => p.name);
// map = {'young': ['John', 'Carl'], 'old': ['Peter', 'Sarah']}
Implementation
Map<K, List<V>> groupBy<K, V>(K Function(E element) keySelector, {V Function(E element)? valueTransform}) {
valueTransform ??= (element) => element as V;
final map = <K, List<V>>{};
forEach((element) {
final key = keySelector(element);
if (!map.containsKey(key)) {
map[key] = [];
}
map[key]!.add(valueTransform!(element));
});
return map;
}