我正在尝试在Dart中创建 int列表的列表,但是遇到了一些问题。
如果创建了一个int listInt = [1,2,3]的列表并将其添加到主List(int的List列表)中,则会成功添加它。 [[1,2,3]]
现在,如果我清除listInt listInt.clear()并添加新值 listInt = [3,2,1] ,然后添加该值再次进入主列表;它被添加了,但是它也覆盖了前一个。 [[3,2,1],[3,2,1]]
我想要的是 [[1、2、3],[3、2、1]]
代码如下
List<int> listInt = List();
List<List<int>> mainListInt = List();
listInt.add(1);
listInt.add(2);
listInt.add(3);
mainListInt.add(listInt);
print(mainListInt);
listInt.clear();
print(mainListInt);
listInt.add(3);
listInt.add(2);
listInt.add(1);
mainListInt.add(listInt);
print(mainListInt);
输出
[[1, 2, 3]]
[[]]
[[3, 2, 1], [3, 2, 1]]
答案 0 :(得分:1)
您需要确保您没有将子列表的引用保存到主列表中,因为这会如您所注意到的那样将修改应用于子列表。
您可以使用List.of
创建一个新实例(它创建列表的副本,这是一个不同的引用):
mainListInt.add(List.of(listInt));
答案 1 :(得分:0)
您可以使用void main(List<String> args) {
List<int> listInt = List();
List<List<int>> mainListInt = List();
listInt.add(1);
listInt.add(2);
listInt.add(3);
mainListInt.add(listInt.toList());
print(mainListInt);
listInt.clear();
print(mainListInt);
listInt.add(3);
listInt.add(2);
listInt.add(1);
mainListInt.add(listInt.toList());
print(mainListInt);
}
创建列表的副本。
{{1}}
答案 2 :(得分:0)
ListDestination = List.from(ListOrigin);
答案 3 :(得分:-1)
我发现但不喜欢的一种解决方案是使用List.generate()获取列表中列表的特定编号。
List<List<int>> mainListInt = List.generate(2, (i) => []);
mainListInt[0].add(1);
mainListInt[0].add(2);
mainListInt[0].add(3);
print(mainListInt);
mainListInt[1].add(3);
mainListInt[1].add(2);
mainListInt[1].add(1);
print(mainListInt);
输出
[[1, 2, 3], []]
[[1, 2, 3], [3, 2, 1]]