我有这张地图:
var temp= {
'A' : 3,
'B' : 1,
'C' : 2
};
Run Code Online (Sandbox Code Playgroud)
如何对地图的值排序(降序)。我知道,我可以使用temp.values.toList().. sort()。
但是我想在这样的键的上下文中进行排序:
var temp= {
'B' : 1,
'C' : 2
'A' : 3,
};
Run Code Online (Sandbox Code Playgroud)
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);
}
Run Code Online (Sandbox Code Playgroud)
本示例使用自定义比较功能,该功能使sort()键按值排序。然后,将键和值插入到中,LinkedHashMap因为这种映射可以保证保留顺序。基本上与/sf/answers/2074061321/相同,但针对您的用例进行了自定义。
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);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2262 次 |
| 最近记录: |