Flutter中执行List.add()后清除一维List时如何保留二维List数据?
Flutter中清除一维List后保留二维List数据的解决办法
Dart里的List是引用类型,你把一维List添加到二维List时,存的是原List的引用地址,不是数据副本。所以执行num.clear()后,二维List里的对应元素也会跟着变空。要解决这个问题,只需要在添加时存入原List的副本而非引用就行,下面是两种常用方法:
方法一:使用List.from()或toList()创建副本
通过这两个方法生成原List的新实例,添加到二维List中:
List<int> num = [1, 2, 3]; List<List<int>> num2 = []; // 方式1:用List.from()创建副本 num2.add(List.from(num)); // 方式2:用toList()创建副本 // num2.add(num.toList()); num.clear(); // 此时num2的内容为[[1,2,3]],不受clear影响
方法二:使用扩展操作符...生成新List
扩展操作符可以快速复制原List的所有元素到新List中:
List<int> num = [1, 2, 3]; List<List<int>> num2 = []; num2.add([...num]); // 生成包含原List所有元素的新List num.clear(); // num2依然保留[[1,2,3]]
注意事项
以上两种方式都是浅拷贝,如果你的一维List中存储的是自定义类实例这类复杂对象,浅拷贝只会复制引用,修改原对象仍会影响二维List里的元素。这种情况需要实现深拷贝(比如给类添加复制方法),但如果是int、String这类基础数据类型,浅拷贝完全够用。
内容的提问来源于stack exchange,提问作者Jungwon
相关产品推荐
相关产品推荐

