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

Ali*_*yre 3 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));
Run Code Online (Sandbox Code Playgroud)

这总是导致

a
c
x
b
Run Code Online (Sandbox Code Playgroud)

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

mat*_*rey 6

Dart的核心库有几个实现Map.我们看看吧!

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

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

您将看到以下说明:

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

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

创建一个LinkedHashMap包含所有键/值对的实例other.

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

HashMap这里你要少一点的内存使用情况,或者顺序不明确有用的或不想要的类(明确的)可能是有用的.对于大多数用例,正如您所提到的,这LinkedHashMap是完全合适的.

干杯!