【问题标题】:Appending to a slice that is a value in a map [duplicate]附加到作为地图中值的切片[重复]
【发布时间】:2019-05-04 10:23:46
【问题描述】:

我想附加到作为地图值的切片,例如给定 m map[string][]string:

if values, exists := m[key]; exists {
    values = append(values, v)
//  I don't want to call: m[key] = values
} else {
    m[key] = []string{ v }
}

这显然行不通,所以我尝试不按原样附加值,而是执行以下操作:

valuesPtr := &values
*values = append(values, v)

但这也不起作用。我该怎么做?

【问题讨论】:

标签: pointers go slice go-map


【解决方案1】:

你不能那样做。

append 返回一个新切片,因为可能必须调整切片的大小才能完成追加。您必须更新您的地图以使用新返回的切片,如果不通过键引用就无法做到这一点。

【讨论】:

  • 如果我知道最大可能容量并且创建的切片足够大怎么办?或者,是否可以使用数组而不是切片的值创建映射?那我可以使用指针吗?
  • @isapir,容量在这里并不重要。当您附加一个值时,切片的长度会发生变化,使其成为不同的值,即使底层数组没有重新定位。
  • 我应该删除这个问题吗?有 2 个反对票,所以除非它被投票到至少 0,否则我想我会删除它。有趣的是,有人赞成这个答案,所以这对某些人(包括我自己)来说似乎很有用。
猜你喜欢
  • 1970-01-01
  • 2020-07-09
  • 1970-01-01
  • 2021-09-21
  • 1970-01-01
  • 2020-07-06
  • 1970-01-01
  • 2021-08-06
  • 2019-03-05
相关资源
最近更新 更多