相关疑难解决方法(0)

将地图的所有元素复制到另一个元素中

特定

var dst, src map[K]V
Run Code Online (Sandbox Code Playgroud)

我可以复制所有项目srcdst

for k, v := range src {
    dst[k] = v
}
Run Code Online (Sandbox Code Playgroud)

有没有比较惯用的方法呢?

copy仅适用于切片(以及string作为源).

dictionary copy go

63
推荐指数
2
解决办法
3万
查看次数

如何复制地图?

我正在尝试将map(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)

}
Run Code Online (Sandbox Code Playgroud)

我也试过一些动态的东西,但很明显它会抛出一个错误(不能分配给nil)

aSuperMap[y][x] = aData
Run Code Online (Sandbox Code Playgroud)

问题是如何创建关联映射?在PHP中,我只使用aSuperMap [y] [x] = aData.似乎golang没有任何明显的方法.如果我delete(aMap, x)从超级地图中删除 它的引用也会被删除.如果我不删除它,supermap最终会出现重复数据.基本上在每个循环中它aMap使用新值加上所有旧值.

go

54
推荐指数
4
解决办法
7万
查看次数

为什么一个函数中的映射值会受到另一函数中映射条目的影响?

这是我的代码:

func test(v map[string]string) {
    v["foo"] = "bar"
}

func main() {
    v := make(map[string]string)
    test(v)
    fmt.Printf("%v\n", v) // prints map[foo:bar]
}
Run Code Online (Sandbox Code Playgroud)

我对 Go 还很陌生,但据我所知,由于我将映射值传递给test()而不是指向映射的指针,因此该test()函数应该修改映射的不同变量,因此不会影响中变量的值main()。我本来希望它能打印出来map[]。我测试了不同的场景:

type myStruct struct {
    foo int
}

func test2(v myStruct) {
    v.foo = 5
}

func main() {
    v := myStruct{1}
    test2(v)
    fmt.Printf("%v\n", v) // prints {1}
}
Run Code Online (Sandbox Code Playgroud)

在这种情况下,代码的行为符合我的预期。v函数中的变量不受main()中变量的更改的影响test2()。那么为什么地图不同呢?

struct dictionary go

3
推荐指数
1
解决办法
348
查看次数

标签 统计

go ×3

dictionary ×2

copy ×1

struct ×1