登录
首页 >  Golang >  Go问答

在Go语言中如何手动调整切片的容量大小?

来源:stackoverflow

时间:2024-02-13 20:33:22 225浏览 收藏

本篇文章主要是结合我之前面试的各种经历和实战开发中遇到的问题解决经验整理的,希望这篇《在Go语言中如何手动调整切片的容量大小?》对你有很大帮助!欢迎收藏,分享给更多的需要的朋友学习~

问题内容

我将地图的值附加到现有切片中。

代码如下(s 是一个切片,其中已经包含一些元素):

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

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

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


正确答案


为对象分配内存为 make,例如 (play):

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

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

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

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

如果您想手动放大带有元素的切片,您需要:

  • 创建所需容量(和长度)的新切片
  • 使用 copy 复制元素

play 为例。

到这里,我们也就讲完了《在Go语言中如何手动调整切片的容量大小?》的内容了。个人认为,基础知识的学习和巩固,是为了更好的将其运用到项目中,欢迎关注golang学习网公众号,带你了解更多关于的知识点!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>