为了账号安全,请及时绑定邮箱和手机立即绑定

如何在 Go 中手动为现有切片保留空间?

如何在 Go 中手动为现有切片保留空间?

Go
慕容森 2022-08-24 20:21:03
我正在将地图的值追加到现有切片中。代码是这样的(是一个已经包含一些元素的切片):sfor key, value := range m {     s = append(s, value) }据我所知,Go中的切片在需要时会将其大小增加一倍。我可以让它自身的容量增加一倍,但它会在一个循环中发生几次,这可能对性能不利。在本例中,我知道所需的确切空间,即 。如何为切片“保留”空间,就像C++中那样?我希望重新分配只发生一次。len(m)
查看完整描述

1 回答

?
喵喵时光机

TA贡献1846条经验 获得超7个赞

您可以使用 make 为对象分配内存,例如(播放):

s := make([]string, len(m))
    for i, v := range m {
    s[i] = v
}

或者,您可以创建长度为零但容量足以容纳 n 个值的切片。在这里,如果追加的项目数不超过容量(播放),则追加将永远不需要分配新内存。

s := make([]string, 0, len(m))
    for _, v := range m {
    s = append(s, v)
}

如果您想更直观地深入了解切片,这篇博客文章可能会有所帮助:

如果要手动放大包含元素的切片,则需要:

  • 创建所需容量(和长度)的新切片

  • 使用复制将元素复制到

游戏示例。


查看完整回答
反对 回复 2022-08-24
  • 1 回答
  • 0 关注
  • 75 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信