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

Flutter中如何对Map按number、numbertwo两个字段排序?

Dart实现Map双字段排序(先按number,再按numbertwo)

你只需要在现有排序逻辑的基础上,增加二次字段判断即可实现需求,非常简便:

修改后的完整代码

Map mapone = {
  '1': {'number': 8,'numbertwo': 2},
  '2': {'number': 2,'numbertwo': 9},
  '3': {'number': 2,'numbertwo': 3},
  '4': {'number': 9,'numbertwo': 1},
  '5': {'number': 8,'numbertwo': 1},
};
mapone = Map.fromEntries(mapone.entries.toList()
  ..sort((e1, e2) {
    // 第一步:比较number字段
    final numberCompare = e1.value['number'].compareTo(e2.value['number']);
    // 如果number不相等,直接用该结果排序
    if (numberCompare != 0) {
      return numberCompare;
    }
    // 如果number相等,第二步:比较numbertwo字段
    return e1.value['numbertwo'].compareTo(e2.value['numbertwo']);
  }));

逻辑说明

  1. 优先对比number字段,若两个条目number值不同,直接按该字段的比较结果排序
  2. 若number值相同,则自动进入numbertwo字段的对比,以此作为排序依据

自定义升降序

如果需要调整升降序方向,只需在compareTo前添加负号即可:

  • 比如要按number降序、numbertwo升序:
..sort((e1, e2) {
  final numberCompare = -e1.value['number'].compareTo(e2.value['number']);
  if (numberCompare != 0) {
    return numberCompare;
  }
  return e1.value['numbertwo'].compareTo(e2.value['numbertwo']);
})

内容的提问来源于stack exchange,提问作者thiago

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 07:24:22