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