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键丢失)