【发布时间】:2017-11-13 08:49:43
【问题描述】:
我实际上在 Dart 中使用 maps,但我无法弄清楚为什么我的示例中的 map 变量行为异常或者我在代码中做错了什么。
请有人帮我调试代码,我已经发布了重现问题的代码。
example.dart
void main() {
var data2 = {};
var data1 = {};
var floorDetails = new Map();
floorDetails.clear();
for (int i = 0; i < 2; i++) {
data2.clear();
data1.clear();
for (int j = 0; j < 2; j++) {
data1 = {
'flat${(i + 1) * 100 + (j + 1)}': {'flattype': "flat"},
};
data2.addAll(data1);
}
print('data2=$data2');
floorDetails['floor${(i+1)}'] = data2;
print('floorDetails = $floorDetails');
}
print(floorDetails.keys);
}
代码的输出是:
floorDetails = {
floor1: {
flat201: {flattype: flat},
flat202: {flattype: flat}
},
floor2: {
flat201: {flattype: flat},
flat202: {flattype: flat}
}
}
其实我期待的输出是:
floorDetails = {
floor1: {
flat101: {flattype: flat},
flat102: {flattype: flat}
},
floor2: {
flat201: {flattype: flat},
flat202: {flattype: flat}
}
}
这实际上是根据Map.addAll() 方法的文档覆盖map floorDetails 中所有键的值
void addAll( Map<K, V> other )将 other 的所有键值对添加到此映射。
如果 other 的 key 已经在这个 map 中,它的值会被覆盖。
该操作相当于对其他中的每个键和关联值执行
this[key] = value。它迭代其他,因此在迭代过程中不能改变。
虽然在给定的示例中键不同,但它仍然会覆盖值。
请,任何帮助将不胜感激。 非常感谢, 鲯鳅
【问题讨论】:
标签: dart