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
相关产品推荐
相关产品推荐

