首页 > 解决方案 > golang 不会更新地图中的数组

问题描述

m := map[int][2]int{1:{0,10}}
m[1][0] = 1 

我希望上面的工作像这样

a := [2]int{0,10}
a[0] = 1

但相反,它给出了以下错误cannot assign to m[1][0]

对此有什么可能的解释?

PS我知道我可以通过声明一个int映射到切片而不是int到数组来解决这个问题。

标签: arraysdictionarygo

解决方案


赋值的左侧操作数必须是可寻址的、映射索引表达式或空白标识符。

该值m[1][0]不可寻址。有关可寻址内容的列表,请参阅规范。地图值不在该列表中。

该表达式m[1][0]是数组索引表达式,而不是映射索引表达式。

要更新映射中的值,请将映射值分配给变量(可寻址),更新变量并分配回映射:

t := m[1]
t[0] = 1
m[1] = t

另一种方法是使用指向 [2]int 的指针映射:

m := map[int]*[2]int{1: {0, 10}}
m[1][0] = 1

由于隐式指针间接,数组元素是可寻址的。


推荐阅读