zj344842379 2023-07-25 10:03 采纳率: 100%
浏览 40
已结题

fLutter如何快速多重排序?

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

fLutter如何快速将数组中相同的元素拆解成多重数组?

大概是下面的动作
fLutter中需要给List<map> 进行多重排序
比如</map>

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中

  • 写回答

1条回答 默认 最新

  • 藏柏 2023-07-25 10:09
    关注

    直接代码给你

    
    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);
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
    1人已打赏

报告相同问题?

问题事件

  • 系统已结题 8月2日
  • 已采纳回答 7月25日
  • 赞助了问题酬金15元 7月25日
  • 创建了问题 7月25日