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

如何按名称对List中的Map排序?Dart代码问题求助

Dart 按球员name字段升序排序列表的正确实现

你当前代码的问题是在排序每个Map内部的键顺序,而非对整个球员列表按name字段排序,这和你的需求完全不符。

以下是两种正确的实现方式:

方式一:直接修改原列表排序

如果不需要保留原列表的初始顺序,可以直接调用List的sort方法:

var player = [
  {"name": "Ronaldo", "nation": "Portugal", "age": 30},
  {"name": "Messi", "nation": "Argentina", "age": 30},
  {"name": "Dibala", "nation": "Portugal", "age": 30},
  {"name": "Maria", "nation": "Argentina", "age": 30},
  {"name": "Alves Dani", "nation": "Portugal", "age": 30},
];

void main(List<String> args) {
  // 按name字段升序排序
  player.sort((a, b) => a["name"]!.compareTo(b["name"]!));
  print(player);
}

方式二:创建副本排序(保留原列表)

如果需要保留原列表的初始状态,先创建列表副本再排序:

var player = [
  {"name": "Ronaldo", "nation": "Portugal", "age": 30},
  {"name": "Messi", "nation": "Argentina", "age": 30},
  {"name": "Dibala", "nation": "Portugal", "age": 30},
  {"name": "Maria", "nation": "Argentina", "age": 30},
  {"name": "Alves Dani", "nation": "Portugal", "age": 30},
];

void main(List<String> args) {
  // 创建原列表的副本,避免修改原数据
  var sortedAscending = List.from(player)
    ..sort((a, b) => a["name"]!.compareTo(b["name"]!));
  print(sortedAscending);
}

代码说明

  • 核心是利用List的sort方法,传入的比较函数会对比两个球员Map的name字段值
  • 字符串类型的name可以直接用compareTo方法实现自然升序排序
  • 代码中使用!是因为确定每个Map都包含name字段,如果不确定可以先做判空处理(比如a["name"]?.compareTo(b["name"] ?? "") ?? 0)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 03:45:48