dart会自动确定要使用的地图类型吗?

时间:2018-03-11 20:55:20

标签: dart

我正在研究一些与下面的示例非常相似的代码,它总是按顺序解析,尽管从未指定我想要对地图对象进行排序。

Map<String, Map<String, int>> map = {
  "a" : {"value": 1, "price": 2},
  "c" : {"value": 3, "price": 8},
  "x" : {"value": 2, "price": 1},
  "b" : {"value": 1, "price": 8},
};
map.forEach((name, map) => print(map));

这总是导致

a
c
x
b

注意:这就是我想要它做的事情,我只想找到解释为什么它以这种方式做事,因为更好地理解为什么会很有趣。

1 个答案:

答案 0 :(得分:6)

Dart的核心库有几个Map的实现。让我们看看!

注意:我正在引用dev频道SDK,即与Dart 2相关联的频道(并用于Flutter),因此,如果您目前正在使用{{1} SDK,文档可能看起来有点不同

如果您导航到我们的文档:

您将看到以下说明:

  

可以迭代地图及其键和值。迭代的顺序由各种类型的地图定义。

对于默认构造函数(也用于Map语法的构造函数):

  

创建一个{}实例,其中包含LinkedHashMap的所有键/值对。

您可以创建另外两种类型中的一种otherMap(无序; https://api.dartlang.org/dev/2.0.0-dev.35.0/dart-collection/HashMap-class.html)或HashMap(已排序; https://api.dartlang.org/dev/2.0.0-dev.35.0/dart-collection/SplayTreeMap-class.html)你想要不同的行为。

SplayTreeMap类(显式)在您希望减少内存使用量或明确无用或不需要的顺序时非常有用。对于大多数用例,正如您所提到的,HashMap是完全合适的。

干杯!