我想Map<String,int>按值对 a 进行排序。
{'201': 4, '2017CS197': 2, '2017CS300': 6, '202': 4, '205': 3, '206': 3, '207': 5}
Run Code Online (Sandbox Code Playgroud)
这是我的地图。
在我想得到结果为 {'2017CS300': 6,'207':5,'202':4,'201':4,'206':3,'205':3,'2017CS197':2}
谢谢你!
默认映射类在键上按插入顺序排列。最简单的方法是创建一个具有相同条目的新地图,并按照您想要的顺序添加。首先,让我们找到您想要的订单:
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;
});
Run Code Online (Sandbox Code Playgroud)
(这里假设您的键和值都是Comparable,否则您需要自己弄清楚如何比较它们。在这种特殊情况下,键是Strings,值是ints,只有null键或值可能无法比较)。
这以相反的值顺序对条目进行排序,对于相等的值,以相反的键顺序排序。
然后,您可以从这些条目创建一个新地图:
var newMap = Map<String, int>.fromEntries(sortedEntries);
Run Code Online (Sandbox Code Playgroud)
或者您可以通过删除旧条目并添加新条目来修改现有地图:
map..clear()..addEntries(sortedEntries)
Run Code Online (Sandbox Code Playgroud)
或者
for (var entry in sortedEntries) {
map..remove(entry.key)..[entry.key] = entry.value;
}
Run Code Online (Sandbox Code Playgroud)
地图类本身没有用于对其条目进行排序的功能。
要在 Dart中按值升序对地图进行排序:
Map<String, int> map = {'one': 10, 'two': 5, 'three': 7, 'four': 0};
var mapEntries = map.entries.toList()
..sort((a, b) => a.value.compareTo(b.value));
map
..clear()
..addEntries(mapEntries);
print(map); // Must print: {four: 0, two: 5, three: 7, one: 10}
Run Code Online (Sandbox Code Playgroud)