在Dart中,可以使用groupBy
函数来按多个值对列表进行分组。
groupBy
函数是一个自定义的扩展方法,可以将列表中的元素按照指定的多个属性值进行分组。以下是一个示例代码:
extension GroupByExtension<T> on Iterable<T> {
Map<String, List<T>> groupBy(List<String> properties) {
Map<String, List<T>> result = {};
for (var element in this) {
String key = '';
for (var property in properties) {
key += element[property].toString();
}
if (!result.containsKey(key)) {
result[key] = [];
}
result[key]!.add(element);
}
return result;
}
}
void main() {
List<Map<String, dynamic>> data = [
{'name': 'Alice', 'age': 25, 'city': 'New York'},
{'name': 'Bob', 'age': 30, 'city': 'London'},
{'name': 'Charlie', 'age': 25, 'city': 'New York'},
{'name': 'Dave', 'age': 30, 'city': 'London'},
];
List<String> properties = ['age', 'city'];
Map<String, List<Map<String, dynamic>>> groupedData = data.groupBy(properties);
for (var entry in groupedData.entries) {
print('Group ${entry.key}:');
for (var element in entry.value) {
print(element);
}
print('');
}
}
在上述代码中,我们定义了一个groupBy
扩展方法,它接受一个包含属性名的列表作为参数。然后,我们遍历列表中的每个元素,根据指定的属性值生成一个唯一的键。如果该键在结果字典中不存在,则创建一个空列表作为值。然后,将当前元素添加到对应的列表中。最后,返回分组结果字典。
在main
函数中,我们创建了一个包含姓名、年龄和城市的数据列表。然后,我们指定按照年龄和城市进行分组,并将结果存储在groupedData
变量中。最后,我们遍历分组结果,并打印每个分组的内容。
这是一个简单的示例,你可以根据实际需求进行修改和扩展。如果你想了解更多关于Dart的相关知识,可以参考腾讯云的Dart开发者指南。
领取专属 10元无门槛券
手把手带您无忧上云