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]]