如何排序地图值?

问题描述 投票:3回答:2

我有这张地图:

var temp= { 
  'A' : 3,
  'B' : 1,
  'C' : 2
};

如何对地图的值进行排序(降序)。我知道,我可以使用temp.values.toList().. sort()。

但我想在这样的键的上下文中排序:

var temp= { 
  'B' : 1,
  'C' : 2
  'A' : 3,
};
dart
2个回答
3
投票

此示例使用自定义比较函数,该函数使sort()按值对键进行排序。然后将键和值插入到LinkedHashMap中,因为这种映射可以保证顺序。基本上与https://stackoverflow.com/a/29629447/217408相同,但根据您的使用情况进行定制。

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上尝试一下


0
投票
import 'package:queries/collections.dart';

void main() {
  var query = Dictionary.fromMap(temp)
      .orderBy((e) => e.value)
      .toDictionary$1((kv) => kv.key, (kv) => kv.value);
  print(query.toMap());
}

var temp = {'A': 3, 'B': 1, 'C': 2};

结果:

{B: 1, C: 2, A: 3}
© www.soinside.com 2019 - 2024. All rights reserved.