有人可以解释这段代码出了什么问题吗?
从代码中(至少我自己)可以预期,在运行此代码之后,数字列表看起来像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:它不仅仅是一种心理锻炼。
答案 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.first
和List.last
在我的“数组”上运行,并且它们使用此构造函数。此外,现在按预期工作:
graphArray[1][0] = 42;
print(graphArray); // [[null, null], [42, null], [null, null]]