Sort Map<String, dynamic> in flutter dart 其中第一个键是字段名

Sort Map<String, dynamic> in flutter dart where the first key is the field name

我有一个包含在 firebase 中生成的字段的文档,字段名称是今天的日期,值是用户在应用程序中执行特殊操作时的使用增量。

当我从 firebase 检索数据时,我的 Map 统计信息;根据从 firebase 检索数据的方式,以随机顺序填充。

如何根据键值(字符串)对返回的数据进行排序,以便日期按升序排列?

我就是想不通。非常感谢任何提示指针。

var sortedKeys = map.keys.toList()..sort();

试试这个或使用下面的插件

sortedmap: ^0.5.1

进口'package:sortedmap/sortedmap.dart';

main() {
  var map = new SortedMap(Ordering.byValue());
  
  map.addAll({
    "a": 3,
    "b": 2,
    "c": 4,
    "d": 1
  });
  
  print(map.lastKeyBefore("c")); // a
  print(map.firstKeyAfter("d")); // b
  
}

import 'package:sortedmap/sortedmap.dart';

main() {
  var map = new FilteredMap(new Filter(
    compare: (Pair a, Pair b)=>Comparable.compare(a.value, b.value),
    isValid: (Pair v) => v.key!="b",
    limit: 2));
  
  map.addAll({
    "a": 3,
    "b": 2,
    "c": 4,
    "d": 1
  });
  
  print(map.keys); // (d, a)
  
}

它是 key:value 兄弟,它不存在 order 这样的东西,所以它 无法排序 。这是一个地图,只需调用键和它 return 值。

万一你真的想这样做。获取地图的 keys 并排序,使用排序键按顺序创建新地图。

void main() {
  var map = {"b": {}, "d": {}, "a": {}, "h": {}, "f": {}, "c": {}};

  var newmap = {};
  var keys = [...map.keys]..sort((a, b) => a.compareTo(b));
  for (String key in keys) {
    newmap[key] = map[key];
  }

  print("oldmap: $map"); 
  print("newmap: $newmap");
  // result
  // oldmap: {b: {}, d: {}, a: {}, h: {}, f: {}, c: {}}
  // newmap: {a: {}, b: {}, c: {}, d: {}, f: {}, h: {}}
}