You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.30 13:12:18