我想按值对Map<String,int>进行排序。
Map<String,int>
{'201': 4, '2017CS197': 2, '2017CS300': 6, '202': 4, '205': 3, '206': 3, '207': 5}
这是Map。在我想要得到结果为'2017 CS300'之后:2017CS197:2}谢谢你!
mepcadol1#
默认的map类在键上是按插入顺序的。最简单的方法是用相同的条目创建一个新的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; });
(This假设你的键和值都是Comparable,否则你需要自己弄清楚如何比较它们。在这个特定的例子中,键是String s,值是int s,只有null键或值可能是不可比的)。这将以相反的值顺序对条目进行排序,对于相等的值,则以相反的键顺序进行排序。然后,您可以从这些条目创建新Map:
Comparable
String
int
null
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类本身没有对其条目进行排序的功能。
afdcj2ne2#
要在Dart中按值升序对map进行排序:
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}
gudnpqoy3#
我想你可以从this package中使用SortedMap:与SplayTreeMap不同,对象可以按键和值或两者的组合进行排序。
SortedMap
SplayTreeMap
xmakbtuz4#
官方的recomendaton是在从可迭代对象构建Map时使用'for'元素:
var temp = {'201': 4, '2017CS197': 2, '2017CS300': 6, '202': 4, '205': 3, '206': 3, '207': 5}; final sortedInReverse = temp.entries.toList()..sort((a, b)=> b.value.compareTo(a.value)); temp = {for (var entry in sortedInReverse) entry.key: entry.value};
4条答案
按热度按时间mepcadol1#
默认的map类在键上是按插入顺序的。最简单的方法是用相同的条目创建一个新的map,按照你想要的顺序添加。首先,让我们找到你想要的顺序:
(This假设你的键和值都是
Comparable
,否则你需要自己弄清楚如何比较它们。在这个特定的例子中,键是String
s,值是int
s,只有null
键或值可能是不可比的)。这将以相反的值顺序对条目进行排序,对于相等的值,则以相反的键顺序进行排序。
然后,您可以从这些条目创建新Map:
也可以通过删除旧条目并添加新条目来修改现有Map:
或
map类本身没有对其条目进行排序的功能。
afdcj2ne2#
要在Dart中按值升序对map进行排序:
gudnpqoy3#
我想你可以从this package中使用
SortedMap
:与
SplayTreeMap
不同,对象可以按键和值或两者的组合进行排序。xmakbtuz4#
官方的recomendaton是在从可迭代对象构建Map时使用'for'元素: