dart - 如何按其在 dart 中的值对 map 进行排序?

标签 dart

我想排序一个 Map<String,int>按值(value)观。

{'201': 4, '2017CS197': 2, '2017CS300': 6, '202': 4, '205': 3, '206': 3, '207': 5}

这是我的 map 。

在我想得到结果为 {'2017CS300': 6,'207':5,'202':4,'201':4,'206':3,'205':3,'2017CS197':2}

谢谢你!

最佳答案

默认映射类在键上按插入顺序排列。
最简单的方法是创建一个具有相同条目的新 map ,并按照您想要的顺序添加。
首先,让我们找到您想要的订单:

var sortedEntries = map.entries.toList()..sort((e1, e2) {
  var diff = e2.value.compareTo(e1.value);
  if (diff == 0) diff = e2.key.compareTo(e1.key);
  return diff;
});
(这假设您的键和值都是 Comparable ,否则您需要自己弄清楚如何比较它们。在这种特殊情况下,键是 String s,值是 int s,只有 null 可能是可通信的键或值)。
这以相反的值顺序对条目进行排序,对于相等的值,以相反的键顺序排序。
然后,您可以从这些条目创建一个新 map :
var newMap = Map<String, int>.fromEntries(sortedEntries);
或者您可以通过删除旧条目并添加新条目来修改现有 map :
map..clear()..addEntries(sortedEntries)
或者
for (var entry in sortedEntries) {
  map..remove(entry.key)..[entry.key] = entry.value;
}
map 类本身没有用于对其条目进行排序的功能。

关于dart - 如何按其在 dart 中的值对 map 进行排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56064760/

相关文章:

flutter - 如何在 Dart 中生成类图?

android - 我如何在 flutter 中单击交错 GridView 中的项目

dart - 使用 Barcode Scanner 中的值在 flutter 中添加新值后,列表不会扩展

dart - flutter :为什么我不能使用最终成员字段作为小部件的填充?

list - 如何从Dart Flutter中的键或键值对获取索引

user-interface - 如何在Flutter的Listview中对齐文本和图标?

无法从类中调用 Flutter Provider 的方法

dart - Flutter:如何在英雄动画期间更改子元素的大小?

flutter - 如何在 flutter 中将音频字节转换为字符串

dart - 将IFRAME内容转换为图像