如何在Dart中深度复制List<List<int>>类型的列表?
Dart中深度复制List<List>的实用方法
针对List<List<int>>的深度复制需求,以下是几种高效且可靠的实现方式,可规避浅拷贝和JSON编码解码的弊端:
1. 嵌套遍历手动复制
直接遍历外层列表,对每个子列表单独执行拷贝操作:
List<List<int>> original = [[1, 2], [3, 4], [5, 6]]; List<List<int>> deepCopy = []; for (var sublist in original) { // 用扩展运算符复制子列表,也可替换为List.from(sublist) deepCopy.add([...sublist]); }
2. 链式map+toList简化写法
用map遍历外层列表,同时复制每个子列表,最后转为新列表,代码更简洁:
List<List<int>> deepCopy = original.map((sublist) => [...sublist]).toList();
3. 递归工具函数(适配多层嵌套列表)
如果需要处理更深层次的嵌套列表(比如List<List<List<int>>>),可以编写通用的递归复制函数:
List deepCopyNestedList(List original) { return original.map((element) { if (element is List) { return deepCopyNestedList(element); } else { // int是不可变类型,直接返回即可;若为可变对象,需单独实现其复制逻辑 return element; } }).toList(); } // 使用示例 List<List<int>> deepCopy = deepCopyNestedList(original) as List<List<int>>;
关键说明
- 浅拷贝方法(如
[...original]或original.toList())仅复制外层列表的引用,子列表仍指向原内存地址,修改子列表会同步影响原列表,因此不适用。 - JSON编码解码方法虽可行,但会带来额外性能开销,且对复杂类型会丢失类型信息,完全没必要用于
List<List<int>>这类简单结构。
内容的提问来源于stack exchange,提问作者crustification
相关产品推荐
相关产品推荐

