我正在研究一些与下面的示例非常相似的代码,它总是按顺序解析,尽管从未指定我想要对地图对象进行排序。
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
注意:这就是我想要它做的事情,我只想找到解释为什么它以这种方式做事,因为更好地理解为什么会很有趣。
答案 0 :(得分:6)
Dart的核心库有几个Map
的实现。让我们看看!
注意:我正在引用dev
频道SDK,即与Dart 2相关联的频道(并用于Flutter),因此,如果您目前正在使用{{1} SDK,文档可能看起来有点不同
如果您导航到我们的文档:
stable
(https://api.dartlang.org/dev/dart-core/dart-core-library.html)dart:core
(https://api.dartlang.org/dev/dart-core/Map-class.html)您将看到以下说明:
可以迭代地图及其键和值。迭代的顺序由各种类型的地图定义。
对于默认构造函数(也用于Map
语法的构造函数):
创建一个
{}
实例,其中包含LinkedHashMap
的所有键/值对。
您可以创建另外两种类型中的一种other
,Map
(无序; 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
是完全合适的。
干杯!