有人可以解释这段代码出了什么问题吗?从代码中(至少我自己)可以预期,在运行此代码后,数字列表看起来像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:这不仅仅是一种心理锻炼.
似乎列表中的每个元素都填充了相同的实例[].然后numbers[0].add(0); numbers[0],如果您执行并numbers[1]显示添加的内容,0因为它们引用相同的列表实例.
将列表初始化更改为
List<List<int>> numbers = new List.generate(n, (i) => []);
Run Code Online (Sandbox Code Playgroud)
显示您的预期行为.
我遇到了同样的问题,并得到了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.first和List.last我的"数组"工作,他们使用这个构造函数.此外,这现在按预期工作:
graphArray[1][0] = 42;
print(graphArray); // [[null, null], [42, null], [null, null]]
Run Code Online (Sandbox Code Playgroud)