我正在尝试将地图( 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
新值加上所有旧值。
原文由 The user with no hat 发布,翻译遵循 CC BY-SA 4.0 许可协议
您不是在复制地图,而是在复制地图的参考。您的
delete
因此修改了原始地图和超级地图中的值。要复制地图,您必须使用for
循环,如下所示:这是现已停用的 SO 文档中的示例: