删除项目后切片的容量
在 Go 中使用切片时,了解它们的容量如何根据项目类型而变化非常重要进行了修改。为了说明这一点,让我们检查一个代码片段及其输出:
package main import "fmt" func main() { s := []int{2, 3, 5, 7, 11, 13} printSlice(s) // Drop its last two values s = s[:len(s)-2] printSlice(s) // Drop its first two values. s = s[2:] printSlice(s) } func printSlice(s []int) { fmt.Printf("len=%d cap=%d %v\n", len(s), cap(s), s) }
输出:
len=6 cap=6 [2 3 5 7 11 13] len=4 cap=6 [2 3 5 7] len=2 cap=4 [5 7]
为什么放置物品后的容量不同?
请注意,当我们从切片中删除最后两项 (s = s[:len(s)-2]) 时,容量保持为 6 不变,同时删除前两项 (s = s[2:] ) 将容量减少到 4。
造成这种差异的原因在于 Go 中切片的实现方式。切片本质上是底层数组的视图。删除最后两个值会调整切片的长度,即切片指向的元素数量,但不会影响容量,即底层数组的大小。
但是,删除前两个值值会导致创建一个新的基础数组来保存缩减后的切片。这是因为原始底层数组中的元素向下移动了两个位置来填充间隙,并且需要一个新数组来容纳移动的元素。
以上是从 Go 切片中删除元素如何影响其容量?的详细内容。更多信息请关注PHP中文网其他相关文章!