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']); }));
逻辑说明
- 优先对比
number字段,若两个条目number值不同,直接按该字段的比较结果排序 - 若
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
相关产品推荐
相关产品推荐

