刪除項目後切片的容量
在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中文網其他相關文章!