fLutter如何快速将数组中相同的元素拆解成多重数组?
大概是下面的动作
fLutter中需要给List
List<Map> employees = [
{'name':'Deshawn','age':'18','gender':'Man'},
{'name':'Deshawn','age':'16','gender':'Woman'},
{'name':'Jon','age':'18','gender':'Man'},
{'name':'Jon','age':'12','gender':'Man'},
{'name':'Deshawn','age':'16','gender':'Man'},
];
首先需要用姓名排序
使用Sort后
[
{'name':'Deshawn','age':'18','gender':'Man'},
{'name':'Deshawn','age':'16','gender':'Woman'},
{'name':'Deshawn','age':'16','gender':'Man'},
{'name':'Jon','age':'18','gender':'Man'},
{'name':'Jon','age':'12','gender':'Man'},
];
然后需要把姓名重复的进行年龄排序
这里如何将
Deshawn和Jon拆解成多重数组
然后在分别
sort变成
[
{'name':'Deshawn','age':'18','gender':'Man'},
{'name':'Deshawn','age':'16','gender':'Woman'},
{'name':'Deshawn','age':'16','gender':'Man'},
];
[
{'name':'Jon','age':'18','gender':'Man'},
{'name':'Jon','age':'12','gender':'Man'},
];
在进行性别排序最后希望的结果
[
{'name':'Deshawn','age':'18','gender':'Man'},
{'name':'Deshawn','age':'16','gender':'Man'},
{'name':'Deshawn','age':'16','gender':'Woman'},
{'name':'Jon','age':'18','gender':'Man'},
{'name':'Jon','age':'12','gender':'Man'},
];
有什么简单的写法么?
我自己写的话 就要用跑好多遍循环来实现
flutter中
直接代码给你
List<Map<String, dynamic>> employees = [
{'name':'Deshawn','age':'18','gender':'Man'},
{'name':'Deshawn','age':'16','gender':'Woman'},
{'name':'Jon','age':'18','gender':'Man'},
{'name':'Jon','age':'12','gender':'Man'},
{'name':'Deshawn','age':'16','gender':'Man'},
];
// 首先按照姓名排序
employees.sort((a, b) => a['name'].compareTo(b['name']));
// 使用groupBy函数将姓名相同的员工进行分组
Map<String, List<Map<String, dynamic>>> groupedEmployees = Map.fromEntries(
employees.groupBy((employee) => employee['name'])
);
// 对每个分组再按照年龄进行排序
groupedEmployees.forEach((name, employees) {
employees.sort((a, b) => int.parse(a['age']).compareTo(int.parse(b['age'])));
});
// 合并分组得到最终结果
List<Map<String, dynamic>> sortedEmployees = [];
groupedEmployees.values.forEach((employees) {
sortedEmployees.addAll(employees);
});
print(sortedEmployees);