Dart 如何克隆地图列表
Posted
技术标签:
【中文标题】Dart 如何克隆地图列表【英文标题】:Dart how to clone a List of Maps 【发布时间】:2019-12-17 23:09:01 【问题描述】:我正在尝试从地图列表中获取多个值,但每当我更改新列表值时,它也会更改原始地图列表中的相同值。
如何正确克隆列表,以免发生这种情况?
final List<Map> entries = [
'date': '2019-7-29', 'data': 85.0,
'date': '2019-8-2', 'data': 85.0,
'date': '2019-8-3', 'data': 85.0,
];
List<Map> getSelected()
List<Map> obj = [];
for (var i = 0; i < 2; i++)
obj.add(entries[i]);
obj[i]['data'] = obj[i]['data'] * 2;
return obj;
selected = getSelected();
编辑:这是建议的,但似乎无法解决问题。我猜是因为对象是通过引用传递的。
List<Map> getSelected(List<Map> arr)
List<Map> obj = [];
for (var i = 0; i < 2; i++)
obj.add(arr[i]);
obj[i]['data'] = obj[i]['data'] * 2;
return obj;
selected = getSelected(entries);
【问题讨论】:
【参考方案1】:final List<Map> entries = [
'date': '2019-7-29', 'data': 85.0,
'date': '2019-8-2', 'data': 85.0,
'date': '2019-8-3', 'data': 85.0,
];
List<Map> selected = new List<Map>();
entries.forEach((map) => selected.add(new Map.from(map)) );
selected.forEach((map) => map["data"] = map["data"] * 2 );
会解决你的问题。
【讨论】:
这看起来很有趣,但你的代码并没有像我的函数getSelected()
那样做。您从 entires
获取值而不更改任何值。
这是在不共享相同地图引用的情况下克隆它的方法。您也可以使用它进行修改。在不同的步骤中考虑克隆和数据更新怎么样? entries.forEach((map) => entries2.add(new Map.from(map)) );
entries2.forEach((map) => map["data"] = map["data"] * 2 );
是的,这是一个很好的解决方案。如果您更新答案,使其与我的原始代码相同,我可以接受它作为最佳答案。以上是关于Dart 如何克隆地图列表的主要内容,如果未能解决你的问题,请参考以下文章