Dart 如何对映射值进行排序?
我有这张地图:Dart 如何对映射值进行排序?,dart,Dart,我有这张地图: var temp= { 'A' : 3, 'B' : 1, 'C' : 2 }; 如何对映射的值进行排序(降序)。我知道,我可以使用temp.values.toList()…sort() 但我想在如下键的上下文中进行排序: var temp= { 'B' : 1, 'C' : 2 'A' : 3, }; 此示例使用一个自定义比较函数,该函数使sort()按值对键进行排序。然后将键和值插入到LinkedHashMap中,因为这种映射保证保持顺序。 基
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);
}
在上试用它,它有一个接受映射的命名构造函数和一个比较器,用于在构建新映射时对给定映射进行排序。由于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);
}
看起来像是一个可能的复制品,我刚刚开始使用Dart,我的项目也需要这个解决方案/模式,但网站没有解释这个概念。你能给我指一本书或一个网站来解释这一点和其他概念吗?我不知道有哪本书或一个网站可以解释这一点。@GünterZöchbauer可以按降序排序吗?在那之后,有可能得到前3个值吗?是升序还是降序?如何获得前3个最大值键?感谢您将
中的k1
和k2
互换顺序反转。排序(…)
。要获得前三名,请使用var sortedKeys=temp.keys.toList(可增长:false)…排序((k1,k2)=>temp[k2]。比较(temp[k1]))。取(3)
LinkedHashMap.fromIterable(…)`将仅从这些键构建映射。抱歉,这是因为。
。将.take(3)
移动到LinkedHashMap-sortedMap=new LinkedHashMap.fromIterable(sortedKeys.take(3),key:…
请不要仅将代码作为答案发布,还要提供代码的作用以及如何解决问题的解释。带有解释的答案通常更有帮助,质量更好,并且更有可能吸引更多投票。不幸的是,如果两个值相同,此解决方案将丢失信息。请尝试h:{'A':3,'B':2,'C':2}
将返回{B:2,A:3}
(C键丢失)