Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Dart 省道地图的怪异行为';s_Dart - Fatal编程技术网

Dart 省道地图的怪异行为';s

Dart 省道地图的怪异行为';s,dart,Dart,我期待着最后的c {a: {a: aA, b: aB}, b: {a: bA, b: bB}} 但它实际上变成了 {a: {a: bA, b: bB}, b: {a: bA, b: bB}} Dart代码: Map<String, String> a = { 'a' : 'A', 'b' : 'B', }; Map<String, String> b = {}; Map<String, Map<String, String>> c =

我期待着最后的c

{a: {a: aA, b: aB}, b: {a: bA, b: bB}}
但它实际上变成了

{a: {a: bA, b: bB}, b: {a: bA, b: bB}}
Dart代码:

Map<String, String> a = {
  'a' : 'A',
  'b' : 'B',
};
Map<String, String> b = {};
Map<String, Map<String, String>> c = {};
void main() {
  for (var i in a.keys){
    for (var j in a.keys){
      b[j] = i+a[j];
      print('i: $i, j: $j, b[j]:${b[j]}');
    }
    print(b);
    c[i] = b;
    print(c);
  }
  print('final c is $c');
}

为什么会发生这种情况?

b
映射插入
c
映射后,您正在修改它。我认为误解是因为你认为它是你放在
c
中的对象的副本,但实际上它是一个参考。如果打印
a
b
hashCode
,您可以看到它们实际上是同一个对象:

print(c['a'].hashCode == c['b'].hashCode); // true
您真正想要的是为第一个循环的每次迭代使用一份
b
,这样代码看起来像:

Map<String, String> a = {
  'a': 'A',
  'b': 'B',
};

Map<String, Map<String, String>> c = {};

void main() {
  for (var i in a.keys) {
    Map<String, String> b = {}; // <-- this is the fix

    for (var j in a.keys) {
      b[j] = i + a[j];
      print('i: $i, j: $j, b[j]:${b[j]}');
    }
    print(b);
    c[i] = b;
    print(c);
  }
  print('final c is $c'); // {a: {a: aA, b: aB}, b: {a: bA, b: bB}}
  print(c['a'].hashCode == c['b'].hashCode); // false
}
Map a={
‘a’:‘a’,
‘b’:‘b’,
};
映射c={};
void main(){
for(a.keys中的var i){
映射b={}//
Map<String, String> a = {
  'a': 'A',
  'b': 'B',
};

Map<String, Map<String, String>> c = {};

void main() {
  for (var i in a.keys) {
    Map<String, String> b = {}; // <-- this is the fix

    for (var j in a.keys) {
      b[j] = i + a[j];
      print('i: $i, j: $j, b[j]:${b[j]}');
    }
    print(b);
    c[i] = b;
    print(c);
  }
  print('final c is $c'); // {a: {a: aA, b: aB}, b: {a: bA, b: bB}}
  print(c['a'].hashCode == c['b'].hashCode); // false
}