修改作为地图值的数组

时间:2013-12-29 17:04:11

标签: arrays map go

如果我的地图的值是数组,我该如何修改数组的一个元素?

这样的事情:

m := make(map[string][4]int)
m["a"]=[...]int{0,1,2,3}
m["a"][2]=10

它不会编译:{{1​​}}

我可以将变量复制到数组中,修改它然后将其复制回地图,但它似乎非常慢,特别适用于大型数组。

prog.go:8: cannot assign to m["a"][2]

有什么想法吗?

3 个答案:

答案 0 :(得分:4)

使用指针。例如,

package main

import "fmt"

func main() {
    m := make(map[string]*[4]int)
    m["a"] = &[...]int{0, 1, 2, 3}
    fmt.Println(*m["a"])
    m["a"][2] = 10
    fmt.Println(*m["a"])
}

输出:

[0 1 2 3]
[0 1 10 3]

答案 1 :(得分:0)

您的地图值(arrays)不是addressable,来自spec

  

每个左侧操作数必须是可寻址的

如果你真的想使用Arrays,请去找@peterSO建议的内容,但我认为这里的Slices更为习惯。

答案 2 :(得分:0)

如果将字符串映射到切片而不是数组,则可以:

m := make(map[string][]int)
m["a"] = []int{0, 1, 2, 3}
fmt.Println(m["a"])
m["a"][2] = 10
fmt.Println(m["a"])