按键值对对象映射进行排序

Cla*_*ude 3 dart

我有一个 JSON 对象,我需要按“SortOrder”键的值对其进行排序,但我不确定如何在 Dart 中执行此操作。

JSON:

"BTS": {
      "Id": "2039",,
      "SortOrder": "10001",
    },
"ETS": {
      "Id": "1039",,
      "SortOrder": "50",
    },
"RTS": {
      "Id": "39",,
      "SortOrder": "1",
    },
"TTS": {
      "Id": "139",,
      "SortOrder": "1001",
    },
Run Code Online (Sandbox Code Playgroud)

按“SortOrder”键值对这些对象进行排序的正确方法是什么?

lrn*_*lrn 5

乔纳威廉姆斯方法的简短版本:

var newMap = Map.fromEntries(originalMap.entries.toList()..sort((e1, e2) =>
    int.parse(e1.value["SortOrder"]).compareTo(int.parse(e2.value["SortOrder"]))));
Run Code Online (Sandbox Code Playgroud)

如果效率很重要,最好将“SortOrder”字符串解析为整数一次,或者使用对嵌入数字进行数值比较的字符串比较,例如package:collection 中的compareNatural。有了这个,代码将是:

var newMap = Map.fromEntries(originalMap.entries.toList()..sort((e1, e2) =>
    compareNatural(e1.value["SortOrder"], e2.value["SortOrder"])));
Run Code Online (Sandbox Code Playgroud)