在 Dart 中按键或按值对地图进行排序

Alv*_*nda 9 dart

我有以下地图

Map testMap = { 
  3 : {
    'order': 3,
    'sample' : 'sample'
  },
  2 : {
    'order': 2,
    'sample' : 'sample'
  },
  1 : {
    'order': 1,
    'sample' : 'sample'
  },
  4: {
    'order': 4,
    'sample' : 'sample'
  }
};
Run Code Online (Sandbox Code Playgroud)

如果不可能通过子映射内的“顺序”值,我如何按键对其进行排序。

注意:地图最多可容纳 100 个字段。

解决了 我之前一定很累了,但以防万一其他人正在看这里是我的解决方案。另外,仅通过按键排序会SplayTreeMap产生奇怪的顺序,例如 1,10,11,12,13,14,15,16,17,18,19,2,20,21 ...

import 'dart:collection';

void main() {
  Map testMap = {
     11: {
      'order': '11',
      'sample' : 'sample'
    },
    3 : {
      'order': '3',
      'sample' : 'sample'
    },
    2 : {
      'order': '2',
      'sample' : 'sample'
    },
    1 : {
      'order': '1',
      'sample' : 'sample'
    },
    4: {
      'order': '4',
      'sample' : 'sample'
    },
    31: {
      'order': '31',
      'sample' : 'sample'
    },
    21: {
      'order': '21',
      'sample' : 'sample'
    }
  };

  final sorted = new SplayTreeMap.from(testMap, (a, b) => int.parse(testMap[a]['order']).compareTo(int.parse(testMap[b]['order'])));

  print(sorted);
}
Run Code Online (Sandbox Code Playgroud)

kun*_*ani 8

这是在 dart 中按键对映射进行排序的最简单方法。

var map = {
"a": 1,
"c": 3,
"b": 2,
};

void main() {
  final sorted = Map.fromEntries(map.entries.toList()..sort((e1, e2) => e1.key.compareTo(e2.key)));
  print(sorted);
}
Run Code Online (Sandbox Code Playgroud)


the*_*cap 5

根据 Map 的值对 Map 进行排序的示例代码

import 'dart:collection';

var map = {
"a": 2,
"b": 1,
"c": -1,
};

void main() {
  final sorted = new SplayTreeMap<String,dynamic>.from(map, (a, b) => map[a] > map[b] ? 1 : -1 );
  print(sorted);
}
Run Code Online (Sandbox Code Playgroud)