List 如何处理列表列表?

List 如何处理列表列表?,list,dart,List,Dart,有人能解释一下这段代码出了什么问题吗? 从代码一(至少我自己)可以预期,在运行此代码之后,数字列表将看起来像numbers=[[0],[1]],但它看起来像numbers=[[0,1],[0,1] void main(){ int n=2; 列表编号=新列表。已填充(n,[]); 对于(int i=0;i,列表中的每个元素似乎都填充了相同的[]实例。 如果然后执行numbers[0]。添加(0);numbers[0]和numbers[1]显示添加的0,因为它们引用相同的列表实例 将列表初始化更改

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

void main(){
int n=2;
列表编号=新列表。已填充(n,[]);

对于(int i=0;i,列表中的每个元素似乎都填充了相同的
[]
实例。 如果然后执行
numbers[0]。添加(0);
numbers[0]
numbers[1]
显示添加的
0
,因为它们引用相同的列表实例

将列表初始化更改为

List number=new List.generate(n,(i)=>[]);

显示您的预期行为。

我也遇到了同样的问题,并且得到了Günter Zöchbauers答案的帮助。但是,为了正确控制“数组”的“宽度”,我调整了代码如下:

List <List<num>> graphArray = new List.generate(arrayMaxY, (i) => new List(arrayMaxX));
对我来说至关重要的是方法
List.first
List.last
在我的“数组”中起作用,并且它们与此构造函数一起起作用。此外,这现在可以按预期工作:

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

是的,你说得对。事实上,
number
的每个元素都有相同的id,现在我在调试器中注意到了这一点。谢谢。
graphArray[1][0] = 42;
print(graphArray); // [[null, null], [42, null], [null, null]]