如果我的地图的值是数组,我该如何修改数组的一个元素?
这样的事情:
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]
有什么想法吗?
答案 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"])