Dart:列表列表

Vic*_*aev 2 list dart

有人可以解释这段代码出了什么问题吗?从代码中(至少我自己)可以预期,在运行此代码后,数字列表看起来像numbers = [[0], [1]],但它看起来像numbers= [[0,1], [0,1]].

void main() {
  int n = 2;
  List<List<int>> numbers = new List.filled(n, []);

  for(int i=0; i<n; i++)
    for(int j=i+1; j<n; j++ ){
      numbers[i].add(0);
      numbers[j].add(1);
    }
}
Run Code Online (Sandbox Code Playgroud)

PS:这不仅仅是一种心理锻炼.

Gün*_*uer 8

似乎列表中的每个元素都填充了相同的实例[].然后numbers[0].add(0); numbers[0],如果您执行并numbers[1]显示添加的内容,0因为它们引用相同的列表实例.

将列表初始化更改为

List<List<int>> numbers = new List.generate(n, (i) => []);
Run Code Online (Sandbox Code Playgroud)

显示您的预期行为.


Yng*_*and 6

我遇到了同样的问题,并得到了GünterZöchbauers的回答.但是,为了正确控制"数组"的"宽度",我调整了代码,如下所示:

List <List<num>> graphArray = new List.generate(arrayMaxY, (i) => new List(arrayMaxX));
Run Code Online (Sandbox Code Playgroud)

当arrayMaxY = 3且arrayMaxX = 2时,结果为:

[[null, null], [null, null], [null, null]]
Run Code Online (Sandbox Code Playgroud)

对我来说至关重要的是方法List.firstList.last我的"数组"工作,他们使用这个构造函数.此外,这现在按预期工作:

graphArray[1][0] = 42;
print(graphArray); // [[null, null], [42, null], [null, null]]
Run Code Online (Sandbox Code Playgroud)