Dart:列表列表

时间:2014-08-04 12:40:16

标签: 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);
    }
}

PS:它不仅仅是一种心理锻炼。

2 个答案:

答案 0 :(得分:6)

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

将列表初始化更改为

List<List<int>> numbers = new List.generate(n, (i) => []);

显示您的预期行为。

答案 1 :(得分:5)

我遇到了同样的问题,并得到了GünterZöchbauers的回答。但是,为了正确控制“数组”的“宽度”,我调整了代码:

List <List<num>> graphArray = new List.generate(arrayMaxY, (i) => new List(arrayMaxX));

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

[[null, null], [null, null], [null, null]]

对我来说至关重要的是方法List.firstList.last在我的“数组”上运行,并且它们使用此构造函数。此外,现在按预期工作:

graphArray[1][0] = 42;
print(graphArray); // [[null, null], [42, null], [null, null]]