我有这张地图:
var temp= {
'A' : 3,
'B' : 1,
'C' : 2
};
如何对地图的值进行排序(降序)。我知道,我可以使用temp.values.toList().. sort()。
但是我想在这样的键的上下文中进行排序:
var temp= {
'B' : 1,
'C' : 2
'A' : 3,
};
答案 0 :(得分:5)
此示例使用自定义比较函数,该函数使sort()
按值对键进行排序。然后将键和值插入LinkedHashMap
,因为这种映射可以保证顺序。
基本上与https://stackoverflow.com/a/29629447/217408相同,但根据您的使用情况进行了自定义。
import 'dart:collection';
void main() {
var temp= {
'A' : 3,
'B' : 1,
'C' : 2
};
var sortedKeys = temp.keys.toList(growable:false)
..sort((k1, k2) => temp[k1].compareTo(temp[k2]));
LinkedHashMap sortedMap = new LinkedHashMap
.fromIterable(sortedKeys, key: (k) => k, value: (k) => temp[k]);
print(sortedMap);
}
上试用
答案 1 :(得分:1)
SplayTreeMap有一个接受名称的构造函数,它接受map和一个比较器,该比较器用于在构建新地图时对给定的map进行排序。由于SplayTreeMap是Map的后代,因此您可以轻松地替换它。
import 'dart:collection';
void main() {
var unsorted = {'A': 3, 'B': 1, 'C': 2};
final sorted = SplayTreeMap.from(
unsorted, (key1, key2) => unsorted[key1].compareTo(unsorted[key2]));
print(sorted);
}
答案 2 :(得分:0)
import 'package:queries/collections.dart';
void main() {
var query = Dictionary.fromMap(temp)
.orderBy((e) => e.value)
.toDictionary$1((kv) => kv.key, (kv) => kv.value);
print(query.toMap());
}
var temp = {'A': 3, 'B': 1, 'C': 2};
结果:
{B: 1, C: 2, A: 3}