如何仅复制列表数据,而不复制参考文件

时间:2019-11-08 17:48:23

标签: flutter dart

我正在尝试在Dart中创建 int列表的列表,但是遇到了一些问题。

  1. 如果创建了一个int listInt = [1,2,3]的列表并将其添加到主List(int的List列表)中,则会成功添加它。 [[1,2,3]]

  2. 现在,如果我清除listInt listInt.clear()并添加新值 listInt = [3,2,1] ,然后添加该值再次进入主列表;它被添加了,但是它也覆盖了前一个。 [[3,2,1],[3,2,1]]

  3. 我想要的是 [[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]]

4 个答案:

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