如何复制地图?
我正在尝试将地图(amap
)的内容复制到另一个地图()内aSuperMap
,然后清除,
amap
以便它可以在下一次迭代/循环中获取新值。问题在于,如果不清除超级地图中的参考,就无法清除地图。这是一些伪代码。
for something := range fruits{ aMap := make(map[string]aStruct)
aSuperMap := make(map[string]map[string]aStruct)
for x := range something{
aMap[x] = aData
aSuperMap[y] = aMap
delete(aMap, x)
}
//save aSuperMap
saveASuperMap(something)
}
我也尝试了一些动态的东西,但显然会引发错误(无法指定为nil)
aSuperMap[y][x] = aData
问题是如何创建关联地图?在PHP中,我只使用aSuperMap [y] [x] =
aData。似乎golang没有任何明显的方法。如果我delete(aMap, x)
从超级地图中删除了
它的引用,那么它也会被删除。如果我不删除它,超级地图最终将出现重复数据。基本上,在每个循环中,它将获得aMap
新值加上所有旧值。
回答:
您不是在复制地图,而是在复制对地图的引用。delete
因此,您将同时修改原始地图和超级地图中的值。要复制地图,您必须使用如下for
循环:
for k,v := range originalMap { newMap[k] = v
}
这是现已退休的SO文档中的示例:
// Create the original maporiginalMap := make(map[string]int)
originalMap["one"] = 1
originalMap["two"] = 2
// Create the target map
targetMap := make(map[string]int)
// Copy from the original map to the target map
for key, value := range originalMap {
targetMap[key] = value
}
摘录自地图-
复制地图。最初的作者是JepZ。归属详细信息可以在贡献者页面上找到。该来源已获得CC
BY-SA 3.0的许可,可以在“
文档”存档中找到。参考主题ID:732和示例ID:9834。
以上是 如何复制地图? 的全部内容, 来源链接: utcz.com/qa/425460.html