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

我正在将地图的值追加到现有切片中。

代码是这样的(是一个已经包含一些元素的切片):s

for key, value := range m {
    s = append(s, value)
}

据我所知,Go中的切片在需要时会将其大小增加一倍。我可以让它自身的容量增加一倍,但它会在一个循环中发生几次,这可能对性能不利。

在本例中,我知道所需的确切空间,即 。如何为切片“保留”空间,就像C++中那样?我希望重新分配只发生一次。len(m)


慕容森
浏览 105回答 1
1回答

喵喵时光机

您可以使用 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) }如果您想更直观地深入了解切片,这篇博客文章可能会有所帮助:https://divan.dev/posts/avoid_gotchas/#arrays-and-slices如果要手动放大包含元素的切片,则需要:创建所需容量(和长度)的新切片使用复制将元素复制到游戏示例。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go