Flutter 如何仅复制列表的数据,而不复制引用

Flutter 如何仅复制列表的数据,而不复制引用,flutter,dart,Flutter,Dart,我正在尝试在Dart中创建int列表的列表,但遇到了一些问题 如果创建了一个int listin=[1,2,3]列表并将其添加到主列表(int列表列表)中,则添加成功。 [[1,2,3]] 现在,如果我清除listinlistin.clear()并添加新值listin=[3,2,1],然后再将其添加到主列表中;它会被添加,但也会覆盖上一个。 [[3,2,1],[3,2,1]] 我想要的是[[1,2,3],[3,2,1]] 代码如下 List<int> listInt = Li

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

  • 如果创建了一个int listin=[1,2,3]列表并将其添加到主列表(int列表列表)中,则添加成功。 [[1,2,3]]

  • 现在,如果我清除listinlistin.clear()并添加新值listin=[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);
    

    我发现了一个解决方案,但不象它,它是使用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);
    

    我发现了一个解决方案,但不象它,它是使用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);
    

    您需要确保不将子列表的引用保存到主列表中,因为这将按照您的注意对子列表进行编辑。
    您可以使用创建新实例(它将创建列表的副本,这是一个不同的引用):

    mainListInt.add(List.of(listInt));
    
    您需要确保不将子列表的引用保存到主列表中,因为这将按照您的注意对子列表进行编辑。
    您可以使用创建新实例(它将创建列表的副本,这是一个不同的引用):

    mainListInt.add(List.of(listInt));
    
    您可以使用
    listInt.toList()
    创建列表的副本

    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);
    }
    
    void main(列表参数){
    List listInt=List();
    List mainListInt=List();
    添加(1);
    添加(2);
    添加(3);
    mainListInt.add(listin.toList());
    打印(mainListInt);
    listInt.clear();
    打印(mainListInt);
    添加(3);
    添加(2);
    添加(1);
    mainListInt.add(listin.toList());
    打印(mainListInt);
    }
    
    您可以使用
    listInt.toList()
    创建列表的副本

    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);
    }
    
    void main(列表参数){
    List listInt=List();
    List mainListInt=List();
    添加(1);
    添加(2);
    添加(3);
    mainListInt.add(listin.toList());
    打印(mainListInt);
    listInt.clear();
    打印(mainListInt);
    添加(3);
    添加(2);
    添加(1);
    mainListInt.add(listin.toList());
    打印(mainListInt);
    }
    
    这是到
    列表的快捷方式。从
    。这是一个独立的方法。当然,任何算法都有一个实现,在哪个地方实现并不重要。你是在暗示这种方法太过了吗?我不确定你在算法部分想说什么,但对这个问题没有。您可以查看-它使用
    列表。从
    。是的。。。你没有回答我的问题
    你是在暗示这个方法是过分的吗?
    即使算法是在`List.from()`中实现的,但不是直接在这个方法中实现的。使用
    Iterable.toList()
    有什么不对?这是从
    列表的快捷方式。这是一个独立的方法。当然,任何算法都有一个实现,在哪个地方实现并不重要。你是在暗示这种方法太过了吗?我不确定你在算法部分想说什么,但对这个问题没有。您可以查看-它使用
    列表。从
    。是的。。。你没有回答我的问题
    你是在暗示这个方法是过分的吗?
    即使算法是在`List.from()`中实现的,但不是直接在这个方法中实现的。使用
    Iterable.toList()
    有什么不对?
    ListDestination = List.from(ListOrigin);