当前位置: 首页 > 面试题库 >

如何在Go中更新地图值

余靖
2023-03-14
问题内容

我想用字符串键和struct值构建一个映射,通过它我可以更新由map key标识的映射中的struct值。

我已经尝试过了,这并没有给我想要的输出。

我真正想要的是:

Received ID: D1 Value: V1
Received ID: D2 Value: V2
Received ID: D3 Value: V3
Received ID: D4 Value: V4
Received ID: D5 Value: V5

Data key: D1 Value: UpdatedData for D1
Data key: D2 Value: UpdatedData for D2
Data key: D3 Value: UpdatedData for D3
Data key: D4 Value: UpdatedData for D4
Data key: D5 Value: UpdatedData for D5

Data key: D1 Value: UpdatedData for D1
Data key: D2 Value: UpdatedData for D2
Data key: D3 Value: UpdatedData for D3
Data key: D4 Value: UpdatedData for D4
Data key: D5 Value: UpdatedData for D5

问题答案:

您无法更改与地图中的键关联的值,只能重新分配值。

这给您2种可能性:

  1. 将指针存储在地图中,因此您可以修改 指向的 对象(不在地图数据结构内部)。

  2. 存储结构值,但是在修改它时,需要将其重新分配给键。

1.使用指针

在地图中存储指针: dataManaged := map[string]*Data{}

当您“填充”地图时,您无法使用循环的变量,因为它在每次迭代中都会被覆盖。而是制作一个副本,并存储该副本的地址:

for _, v := range dataReceived {
    fmt.Println("Received ID:", v.ID, "Value:", v.Value)
    v2 := v
    dataManaged[v.ID] = &v2
}

输出是预期的。在Go Playground上尝试一下。

2.重新分配修改后的结构

坚持在地图中存储结构值: dataManaged := map[string]Data{}

遍历键值对将为您提供值的副本。因此,在修改值之后,请重新分配它:

for m, n := range dataManaged {
    n.Value = "UpdatedData for " + n.ID
    dataManaged[m] = n
    fmt.Println("Data key:", m, "Value:", n.Value)
}

在Go Playground上尝试一下。



 类似资料:
  • 问题内容: 我在寻找类似c ++函数 的原始类型。 还是应该只创建一个新地图? 更新:谢谢您的回答。通过查看答案,我刚刚意识到有时创建新地图可能会导致某些我们不希望出现的不一致情况。考虑以下示例: 我的意思是,这仍然与c ++中的功能不同,后者将清除对象中的内容。 问题答案: 您可能应该只创建一个新地图。没有真正的理由去尝试清除现有的代码,除非同一段映射被多个代码引用,并且一个代码段明确需要清除值

  • 问题内容: 我在这里重新绘制图形时遇到问题。我允许用户在时间刻度(x轴)中指定单位,然后重新计算并调用此函数plots()。我希望该图仅进行更新,而不是将另一个图附加到该图上。 问题答案: 你基本上有两个选择: 精确执行当前操作,但在重新配置数据之前先致电和。这是最慢但最简单,最可靠的选择。 除了重新绘制外,你还可以更新绘图对象的数据。你需要在代码中进行一些更改,但这比每次重新绘制都快得多。但是,

  • 嗨,我正在使用chartnewjs。我想用动画更新饼图。我使用的折线图与实时更新。updateChart(ctx, data, config, true, true)方法工作正常。我已经尝试了同样的饼图,但图表没有更新。 然后我像每次刷新一样尝试创建新图表(document.getElementById(“peak_session”).getContext(“2d”)).Pie(数据,选项)它工作

  • 在我的应用程序中,我有一个按钮,它从数据库中提取经度和纬度,并将它们存储到一个名为bgworker的类中的两个变量中,然后这些变量显示在屏幕上,如下所示:https://I.imgur.com/5ld231v.png 然后将变量与代码一起发送到Google Maps片段: 然而,地图片段本身从不更新,坐标总是设置为0,0我如何更新我的地图上的位置,每当变量更新(这是在单击按钮) 我遇到的两个问题是

  • 我在一个Google Map组件中使用,在主组件中发送道具(坐标作为数组),最后第二个组件(地图)重新使用了这个,我想在地图上显示新的位置。 不幸的是,这没有工作,坐标,正确地改变和组件(地图)累加,但没有刷新。因为当尝试这样做时,地图是白色的(空的),没有什么可显示的 > LAT和Lng以一个坐标开始,setState放入一个新的 不要把整个组件,但这是我调用映射的方式 Map组件