我想按值对Map<String,int>
进行排序。
{'201': 4, '2017CS197': 2, '2017CS300': 6, '202': 4, '205': 3, '206': 3, '207': 5}
这是我的地图。
在我想得到以下结果后,即{'2017CS300':6,'207':5,'202':4,'201':4,'206':3,'205':3,'2017CS197' :2}
谢谢!
答案 0 :(得分:1)
要在飞镖中按地图的升序对地图进行排序:
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}
答案 1 :(得分:0)
我想您可以使用this package中的SortedMap
:
与
SplayTreeMap
不同,对象可以按键和值或两者的组合进行排序。
答案 2 :(得分:0)
使用软件包queries
对地图进行排序:
import 'package:queries/collections.dart';
void main() {
print(_map);
var map = Dictionary.fromMap(_map)
.orderByDescending((kv) => kv.value)
.thenByDescending((kv) => kv.key)
.toDictionary$1((kv) => kv.key, (kv) => kv.value)
.toMap();
print(map);
}
var _map = {
'201': 4,
'2017CS197': 2,
'2017CS300': 6,
'202': 4,
'205': 3,
'206': 3,
'207': 5
};
结果:
{201: 4, 2017CS197: 2, 2017CS300: 6, 202: 4, 205: 3, 206: 3, 207: 5}
{2017CS300: 6, 207: 5, 202: 4, 201: 4, 206: 3, 205: 3, 2017CS197: 2}
文件“ pubspec.yaml”:
dependencies:
queries: ^0.1.12
答案 3 :(得分:0)
默认映射类在键上按插入顺序排列。 最简单的方法是只创建具有相同条目的新地图,并以所需顺序添加。 首先,让我们找到所需的顺序:
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
,而值是{{ 1}} s,只有int
键或值是无法比拟的。
这将按相反的值顺序对条目进行排序,对于相等的值,按相反的键顺序对条目进行排序。
然后您可以从这些条目中创建新地图:
null
或者您可以通过删除旧条目并添加新条目来修改现有地图:
var newMap = Map<String, int>.fromEntries(sortedEntries);
或
map..clear()..addAll(sortedEntries)
地图类本身没有用于排序其条目的功能。