【问题标题】:Dart - How to sort Map's keysDart - 如何对 Map 的键进行排序
【发布时间】:2013-08-15 00:33:09
【问题描述】:

我对在 Dart 中排序 Map 的键有疑问。

Map<String, Object> map = new Map();

如何对地图中的键进行排序?或对 Iterable map.keys 进行排序。

【问题讨论】:

    标签: dart


    【解决方案1】:

    在 Dart 中,它被称为SplayTreeMap

    import "dart:collection";
    
    main() {
      final SplayTreeMap<String, Map<String,String>> st = 
          SplayTreeMap<String, Map<String,String>>();
    
      st["yyy"] = {"should be" : "3rd"};
      st["zzz"] = {"should be" : "last"};
      st["aaa"] = {"should be" : "first"};
      st["bbb"] = {"should be" : "2nd"};
    
      for (final String key in st.keys) {
        print("$key : ${st[key]}");
      }
    }
    
    // Output:
    // aaa : first
    // bbb : 2nd
    // yyy : 3rd
    // zzz : last
    

    【讨论】:

    • 错误 ['should be'] : 方法 '[]' 没有为类 'Object' 定义。
    • @Julien 那是哪个版本的飞镖?曾经在 dart 1.0 中工作
    • 飞镖2,最新
    • 从今天开始,它似乎在 DartPad (dartpad.dev/dart) 上正常工作。
    • 我不明白这个SplayTreeMap 示例的用例。最初的问题是关于对Map 的键进行排序; Map 的值是随机访问的,因此获取 List 的键并对其进行排序应该足以达到相同的结果。
    【解决方案2】:

    如果您想要地图键的排序 List

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

    您可以选择将自定义排序函数传递给List.sort 方法。

    最后,我是否可以建议使用Map&lt;String, dynamic&gt; 而不是Map&lt;String, Object&gt;

    【讨论】:

    • 感谢您的建议!
    • 提防单线map.keys.toList().sort()。为了保持在同一行,应使用级联样式,如map.keys.toList()..sort()
    【解决方案3】:

    我知道我的回答为时已晚,但请查看我发现的内容.. 可能对某人有所帮助

    这个sortedmap 包有助于以排序方式维护对象映射。

    【讨论】:

      【解决方案4】:
      final sorted = SplayTreeMap<String,dynamic>.from(map, (a, b) => a.compareTo(b));
      

      如所见

      How to use a SplayTreeMap on Firebase snapshot dictionary in dart/Flutter?

      【讨论】:

        【解决方案5】:
        map.entries.toList().sort(((a, b) => a.key.compareTo(b.key)));
        

        我想是的。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2016-09-11
          • 2010-10-29
          • 1970-01-01
          • 2017-05-09
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多