Dart中的贴图正在用上次更新的值替换以前关键点的值
实际上,我正在Dart中使用Dart中的贴图正在用上次更新的值替换以前关键点的值,dart,Dart,实际上,我正在Dart中使用maps,我无法理解为什么示例中的map变量行为异常,或者我在代码中做了一些错误的事情 请有人能帮我调试代码,我已经发布了代码重现的问题 例如:省道 实际上,我希望输出为: floorDetails = { floor1: { flat101: {flattype: flat}, flat102: {flattype: flat} }, floor2: { flat201: {flattype: flat}, flat2
map
s,我无法理解为什么示例中的map
变量行为异常,或者我在代码中做了一些错误的事情
请有人能帮我调试代码,我已经发布了代码重现的问题
例如:省道
实际上,我希望输出为:
floorDetails = {
floor1: {
flat101: {flattype: flat},
flat102: {flattype: flat}
},
floor2: {
flat201: {flattype: flat},
flat202: {flattype: flat}
}
}
根据map.addAll()方法的文档,这实际上覆盖了map
floorDetails
中所有键的值
void addAll(
映射其他
)
将其他的所有键值对添加到此映射
如果此映射中已存在other的键,则其值将被覆盖
该操作相当于对每个键和另一个键中的关联值执行此[key]=value
。它会在其他对象上迭代,因此在迭代过程中不能更改
虽然在给定的示例中,键不同,但仍会覆盖值
请,任何帮助都将不胜感激。
非常感谢,,
Mahi在第一次迭代中,在这里分配data2
floorDetails['floor${(i+1)}'] = data2;
但下一次迭代的第一行是
data2.clear();
这将清除数据2
。这也会清除floorDetails['floor1']``的内容,因为它引用了相同的映射
或者创建一个新地图,而不是通过更改
data2.clear();
data1.clear();
到
或在指定地图之前创建地图的副本
floorDetails['floor${(i+1)}'] = new Map.from(data2);
地图是一个对象,通过引用复制。只有像
bool
、double
、int
和String
这样的基本类型是按值复制的。或者您可以使用newmap.from(data2)
而不是{}..addAll(data2)
。对,这更好。哇,太棒了,非常感谢你@Günter Zöchbauer你为我节省了很多时间,因为我花了很长时间试图找出问题所在。不客气:-)。很高兴听到这对你有用。
data2.clear();
data2.clear();
data1.clear();
data2 = {}; // or new Map()
data1 = {};
floorDetails['floor${(i+1)}'] = new Map.from(data2);