如何对地图值进行排序?
How to sort map value?
我有这张地图:
var temp= {
'A' : 3,
'B' : 1,
'C' : 2
};
如何对地图的值进行排序(降序)。我知道,我可以使用 temp.values.toList()..sort().
但我想在这样的键的上下文中排序:
var temp= {
'B' : 1,
'C' : 2
'A' : 3,
};
此示例使用自定义比较函数,使 sort()
按值对键进行排序。然后将键和值插入到 LinkedHashMap
中,因为这种映射保证保留顺序。
与 基本相同,但根据您的用例进行了定制。
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);
}
在 DartPad
上试用
SplayTreeMap 有一个命名构造函数,它接受地图和一个比较器,用于在构建新地图时对给定地图进行排序。由于 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);
}
final Map<String, ClassCategory> category;
...
Map<String, ClassCategory> sorted = SplayTreeMap.from(category,
(key1, key2) => category[key1]!.title.compareTo(category[key2]!.title));
for (var item in sorted.entries) {
...
}
我有这张地图:
var temp= {
'A' : 3,
'B' : 1,
'C' : 2
};
如何对地图的值进行排序(降序)。我知道,我可以使用 temp.values.toList()..sort().
但我想在这样的键的上下文中排序:
var temp= {
'B' : 1,
'C' : 2
'A' : 3,
};
此示例使用自定义比较函数,使 sort()
按值对键进行排序。然后将键和值插入到 LinkedHashMap
中,因为这种映射保证保留顺序。
与
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);
}
在 DartPad
上试用SplayTreeMap 有一个命名构造函数,它接受地图和一个比较器,用于在构建新地图时对给定地图进行排序。由于 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);
}
final Map<String, ClassCategory> category;
...
Map<String, ClassCategory> sorted = SplayTreeMap.from(category,
(key1, key2) => category[key1]!.title.compareTo(category[key2]!.title));
for (var item in sorted.entries) {
...
}