首頁  >  文章  >  後端開發  >  從 Go 切片中刪除元素如何影響其容量?

從 Go 切片中刪除元素如何影響其容量?

Linda Hamilton
Linda Hamilton原創
2024-11-01 09:00:30597瀏覽

How Does Dropping Elements from a Go Slice Affect Its Capacity?

刪除項目後切片的容量

在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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn