我想排序一个 Map<String,int>
按值(value)观。
{'201': 4, '2017CS197': 2, '2017CS300': 6, '202': 4, '205': 3, '206': 3, '207': 5}
这是我的 map 。
在我想得到结果为 {'2017CS300': 6,'207':5,'202':4,'201':4,'206':3,'205':3,'2017CS197':2}
谢谢你!
最佳答案
默认映射类在键上按插入顺序排列。
最简单的方法是创建一个具有相同条目的新 map ,并按照您想要的顺序添加。
首先,让我们找到您想要的订单:
var sortedEntries = map.entries.toList()..sort((e1, e2) {
var diff = e2.value.compareTo(e1.value);
if (diff == 0) diff = e2.key.compareTo(e1.key);
return diff;
});
(这假设您的键和值都是 Comparable
,否则您需要自己弄清楚如何比较它们。在这种特殊情况下,键是 String
s,值是 int
s,只有 null
可能是可通信的键或值)。这以相反的值顺序对条目进行排序,对于相等的值,以相反的键顺序排序。
然后,您可以从这些条目创建一个新 map :
var newMap = Map<String, int>.fromEntries(sortedEntries);
或者您可以通过删除旧条目并添加新条目来修改现有 map :map..clear()..addEntries(sortedEntries)
或者for (var entry in sortedEntries) {
map..remove(entry.key)..[entry.key] = entry.value;
}
map 类本身没有用于对其条目进行排序的功能。
关于dart - 如何按其在 dart 中的值对 map 进行排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56064760/