全球最实用的IT互联网信息网站!

AI人工智能P2P分享&下载搜索网页发布信息网站地图

当前位置:诺佳网 > 电子/半导体 > 可编程逻辑 >

数组中如何增加切片的容量

时间:2023-10-09 10:01

人气:

作者:admin

标签:

导读:切片扩容 相对于数组而言,使用切片的一个好处是:可以按需增加切片的容量。 Golang 内置的 append() 函数会处理增加长度时的所有操作细节。要使用 append() 函数,需要一个被操作的切片...

切片扩容

相对于数组而言,使用切片的一个好处是:可以按需增加切片的容量。

Golang 内置的 append() 函数会处理增加长度时的所有操作细节。要使用 append() 函数,需要一个被操作的切片和一个要追加的值,当 append() 函数返回时,会返回一个包含修改结果的新切片。

函数 append() 总是会增加新切片的长度,而容量有可能会改变,也可能不会改变,这取决于被操作的切片的可用容量。

num := []int{1, 2, 3, 4, 5}
// 创建新的切片,其长度为 2 个元素,容量为 4 个元素

myNum := num[1:3]
// 使用原有的容量来分配一个新元素
// 将新元素赋值为 60
myNum = append(myNum, 60)

执行上面的代码后的底层数据结构如下图所示:

图片

此时因为 myNum 在底层数组里还有额外的容量可用,append() 函数将可用的元素合并入切片的长度,并对其进行赋值。

由于和原始的切片共享同一个底层数组,myNum 中索引为 3 的元素的值也被改动了。

如果切片的底层数组没有足够的可用容量,append() 函数会创建一个新的底层数组,将被引用的现有的值复制到新数组里,再追加新的值,此时 append 操作同时增加切片的长度和容量:

// 创建一个长度和容量都是 4 的整型切片
num := []int{1, 2, 3, 4}

// 向切片追加一个新元素
// 将新元素赋值为 5
myNum := append(num, 5)

当这个 append 操作完成后,newSlice 拥有一个全新的底层数组,这个数组的容量是原来的两倍:

图片

函数 append() 会智能地处理底层数组的容量增长。

在切片的容量小于 1000 个元素时,总是会成倍地增加容量。一旦元素个数超过 1000,容量的增长因子会设为 1.25,也就是会每次增加 25%的容量(随着语言的演化,这种增长算法可能会有所改变)。

温馨提示:以上内容整理于网络,仅供参考,如果对您有帮助,留下您的阅读感言吧!
相关阅读
本类排行
相关标签
本类推荐

CPU | 内存 | 硬盘 | 显卡 | 显示器 | 主板 | 电源 | 键鼠 | 网站地图

Copyright © 2025-2035 诺佳网 版权所有 备案号:赣ICP备2025066733号
本站资料均来源互联网收集整理,作品版权归作者所有,如果侵犯了您的版权,请跟我们联系。

关注微信