【问题标题】:golang does not update array in a mapgolang 不会更新地图中的数组
【发布时间】:2021-10-07 03:41:25
【问题描述】:
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]

对此有什么可能的解释?

附:我知道我可以通过将 int 映射声明为 slice 而不是将 int 映射为数组来解决此问题。

【问题讨论】:

标签: arrays dictionary go


【解决方案1】:

assignment 的左侧操作数必须是 addressable、映射索引表达式或空白标识符。

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

表达式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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-31
    • 1970-01-01
    • 2021-07-05
    • 1970-01-01
    • 2021-06-29
    • 2014-05-28
    相关资源
    最近更新 更多