由奇怪链接的列表(即二维数组)组成的 Dart 列表

问题描述 投票:0回答:1

我只是想在 Dart 中创建一个二维数组,如下所示:

List<List<int>> data = List.filled(7, List.filled(15, 0));
  
data[1][0] = 5;
  
for (int i = 0; i< 7; i++) {
  print('Index $i: ${data[i]}');
}

预期结果是:

Index 0: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
Index 1: [5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
Index 2: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
Index 3: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
Index 4: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
Index 5: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
Index 6: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]

实际结果是:

Index 0: [5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
Index 1: [5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
Index 2: [5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
Index 3: [5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
Index 4: [5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
Index 5: [5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
Index 6: [5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]

这些列表似乎有某种联系。这是为什么?我该如何解决它?谢谢!

arrays list dart multidimensional-array
1个回答
1
投票

您需要为列表中的每个列表元素生成一个新列表。您正在做的是创建一个新列表并将其重复用于第一个列表中的所有职位。

因此,您应该使用

List.filled
,而不是
List.generate
,它要求为示例中需要创建的每个子列表调用一个方法:

void main() {
  List<List<int>> data = List.generate(7, (_) => List.filled(15, 0));

  data[1][0] = 5;

  for (int i = 0; i < 7; i++) {
    print('Index $i: ${data[i]}');
  }
}

输出:

Index 0: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
Index 1: [5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
Index 2: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
Index 3: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
Index 4: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
Index 5: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
Index 6: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
© www.soinside.com 2019 - 2024. All rights reserved.