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

如何在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 16:52:11