如何按名称对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
相关产品推荐
相关产品推荐

