要定义从int到struct顶点的映射,我应该定义map[int]vertex还是map[int]*vertex?首选哪一个?我扩展了Chickencha的代码:package maintype vertex struct { x, y int }func main() { a := make(map[int]vertex) b := make(map[int]*vertex) v := &vertex{0, 0} a[0] = *v b[0] = v v.x, v.y = 4, 4 println(a[0].x, a[0].y, b[0].x, b[0].y) //a[0].x = 3 // cannot assign to (a[0]).x //a[0].y = 3 // cannot assign to (a[0]).y b[0].x = 3 b[0].y = 3 println(a[0].x, a[0].y, b[0].x, b[0].y) u1 := a[0] u1.x = 2 u1.y = 2 u2 := b[0] u2.x = 2 u2.y = 2 println(a[0].x, a[0].y, b[0].x, b[0].y)}输出:0 0 4 40 0 3 30 0 2 2从输出中,我的理解是,如果要更改struct成员,则必须使用指向该结构的指针。但是我仍然不确定潜在的原因。特别是为什么我不能分配给a [0] .x?
2 回答
潇潇雨雨
TA贡献1833条经验 获得超4个赞
这个问题的答案可能取决于Go地图的实现方式。对于当前的实现,我将看一下Go map运行时标头hashmap.h和代码hashmap.c文件。它还取决于您如何使用地图,例如针对地图,键和元素数据结构等的活动类型和数量。
要就地更新矢量元素值,请从地图上读取矢量元素值,更新元素值,然后将更新后的元素值写入地图。例如
package main
type vertex struct {
x, y int
}
func main() {
a := make(map[int]vertex)
a[0] = vertex{0, 0}
println(a[0].x, a[0].y)
v0 := a[0]
v0.x = 1
a[0] = v0
println(a[0].x, a[0].y)
}
输出:
0 0
1 0
- 2 回答
- 0 关注
- 296 浏览
添加回答
举报
0/150
提交
取消