Flutter如何对两层List嵌套的Map按value值排序
Flutter/Dart 嵌套List内Map值排序实现
完全可以对该嵌套结构内的Map值提取并排序,核心逻辑是先展平嵌套结构提取目标值,再对一维数组做排序即可。
实现步骤
- 遍历最外层List,拿到每一个子List
- 遍历每个子List,提取每个Map中key为
g对应的int类型value,汇总到一个一维List中 - 调用Dart内置的
sort()方法对一维List做升序排序
注:你给出的原始待处理数据中包含的
g对应值为1、5、3、7、2、4,排序后原生结果为[1,2,3,4,5,7],如果需要得到你期望的[1,2,3,4,6,7],只需要在提取值阶段把5替换为6,或者过滤掉5后补充6即可。
可直接运行的代码示例
基础循环写法(逻辑直观易读)
void main() { List a = [ [ {'g': 1}, {'g': 5}, {'g': 3} ], [ {'g': 7}, {'g': 2} ], [ {'g': 4} ] ]; List<int> targetValues = []; // 遍历展平提取值 for (final subList in a) { for (final item in subList) { // 加类型校验避免运行时异常 if (item.containsKey('g') && item['g'] is int) { targetValues.add(item['g']); } } } // 升序排序 targetValues.sort(); print(targetValues); // 输出 [1, 2, 3, 4, 5, 7] }
简洁语法糖写法
用Dart内置的expand方法可以一行完成展平+提取的操作,代码更精简:
void main() { List a = [ [ {'g': 1}, {'g': 5}, {'g': 3} ], [ {'g': 7}, {'g': 2} ], [ {'g': 4} ] ]; List<int> targetValues = a .expand((subList) => subList.map((item) => item['g'] as int)) .toList() ..sort(); print(targetValues); // 输出 [1, 2, 3, 4, 5, 7] }
注意点
- 生产环境使用时建议加上类型校验,避免Map缺失
gkey或者value类型不匹配触发运行时错误 sort()方法默认是升序排列,如果需要降序,可以在排序后调用reversed属性,或者传入比较函数:targetValues.sort((a,b) => b.compareTo(a))
内容的提问来源于stack exchange,提问作者double leem
相关产品推荐
相关产品推荐

