Dart中的贴图正在用上次更新的值替换以前关键点的值

Dart中的贴图正在用上次更新的值替换以前关键点的值,dart,Dart,实际上,我正在Dart中使用maps,我无法理解为什么示例中的map变量行为异常,或者我在代码中做了一些错误的事情 请有人能帮我调试代码,我已经发布了代码重现的问题 例如:省道 实际上,我希望输出为: floorDetails = { floor1: { flat101: {flattype: flat}, flat102: {flattype: flat} }, floor2: { flat201: {flattype: flat}, flat2

实际上,我正在Dart中使用
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);