You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 07:35:18