我try 将一个映射(amap)的内容复制到另一个映射(aSuperMap)中,然后清除amap,以便它可以在下一次迭代/循环中接受新值. 问题是你不能清除超级 map 中的 map without to clear its reference. 下面是一些伪代码.

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)

}

我也try 了一些动态的东西,但是很明显它抛出了一个错误(不能赋值为空)

aSuperMap[y][x] = aData

问题是如何创建关联映射?在PHP中,我只需使用aSuperMap[y][x]=adata.看来golang 没有什么明显的方法.如果我删除delete(aMap, x),它在超级 map 中的引用也会被删除.如果我不删除它,SuperMap最终会有重复的数据.基本上,在每个循环中,它都会得到aMap个新值加上所有旧值.

推荐答案

您要复制的不是 map ,而是对 map 的引用.因此,您的delete会修改原始贴图和超级贴图中的值.要复制 map ,必须使用for循环,如下所示:

for k,v := range originalMap {
  newMap[k] = v
}

以下是现已停用的SO文档中的一个示例:

// Create the original map
originalMap := 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
}

节选自Maps - Copy a Map.最初的作者是JepZ岁.详细的归属信息可以在contributor page上找到.源代码在CC BY-SA 3.0下获得许可,可以在Documentation archive中找到.参考主题ID:732和示例ID:9834.

Go相关问答推荐

T的Golang通用切片,其中 *T实现接口

Go在使用HTTP代理时如何处理DNS请求?

如何在Golang中获取mp3文件的持续时间?

如何在VSCode中为特定的.go文件创建调试配置?

从使用Golang otelmux检测的Otel跟踪中获取trace_id

不接受来自 stdin 的重复输入

如何根据地址和大小打印字符串

「GORM错误」不支持的数据类型:&[],不正确的模式

如何在 Go msgraph-sdk-go 中转发消息并包括抄送和/或密送收件人?

如何将验证器标记添加到嵌套字段

如何用mpb创建两行进度条?

判断一个区域内的纬度/经度点

有没有办法计算枚举中定义的项目总数?

将值发送到 Channel 并在就绪时读取输出

如何在 Golang http.Request 对象中读取自定义 ajaxParams

NaN 是 golang 中的可比类型吗?

如何在没有内存分配的情况下压缩和发布文件

Go 中 SDL Surface 的 OpenGL 纹理

如何在 docker 文件中安装 golang 包?

Go/Golang:如何从 big.Float 中提取最低有效数字?