fLutter如何快速多重排序?

问题遇到的现象和发生背景

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);