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

Flutter中如何深拷贝嵌套Map?浅拷贝方法失效求助

Flutter嵌套Map深拷贝解决方案

你的问题出在浅拷贝只复制了外层Map的引用,内层的List仍然和原数据共享内存,所以修改myNewMap的内层List时,originalData也会被改动。下面是两种有效的深拷贝实现方式:

方法一:手动逐层遍历拷贝

通过遍历每一层集合,创建新的对象来实现完全深拷贝:

final Map<String, List<List<dynamic>>> originalData = {
  "Chicago": [
    [8512, 7, 3620.15],
    [8421, 7, 5625],
  ],
  "California": [
    [8512, 21, 11407.630000000001],
    [8708, 12, 5537.84],
  ]
};

// 手动实现深拷贝
Map<String, List<List<dynamic>>> myNewMap = {};
originalData.forEach((city, rows) {
  List<List<dynamic>> newRows = [];
  for (var row in rows) {
    // 复制内层List并插入城市名
    List<dynamic> newRow = List.from(row);
    newRow.insert(0, city);
    newRows.add(newRow);
  }
  myNewMap[city] = newRows;
});

方法二:使用集合的map方法简化代码

利用Map.map和List.map链式调用,更简洁地完成深拷贝:

Map<String, List<List<dynamic>>> myNewMap = originalData.map((city, rows) {
  return MapEntry(
    city,
    rows.map((row) {
      List<dynamic> newRow = List.from(row);
      newRow.insert(0, city);
      return newRow;
    }).toList(),
  );
});

原理说明

  • Map.from()或扩展运算符{...originalData}仅拷贝外层Map的键值对,内层的List<List<dynamic>>仍然是原对象的引用。
  • 上述两种方法都会为每一层List创建新的实例,确保myNewMap和originalData完全独立,修改任意一方都不会影响另一方。

内容的提问来源于stack exchange,提问作者Tushar Goyani

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 19:01:17