Go 切片:揭秘容量和長度
在 Go 中,切片是處理資料集合的強大資料結構。與切片相關的兩個重要概念是容量和長度,一開始可能會讓人難以理解。
考慮以下範例:
func main() { a := make([]int, 5) // [0,0,0,0,0] len=5 cap=5 b := make([]int, 0, 5) // [] len=0 cap=5 c := b[:2] // [0,0] len=2 cap=5 d := c[2:5] // [0,0,0] len=3 cap=3 }
容量與長度
在此範例中,a 的長度為5(它所包含的元素數),容量為5(它包含的元素數)。重新分配之前可以保存的元素數量)。 b 的長度為 0,容量為 5,表示它最初不包含任何元素,但有可能增長到容納 5 個元素。
零元素
當您像b 中那樣使用make([]int, 0, 5) 建立切片時,會建立後備數組,並使用其元素的零值進行初始化。這意味著即使 b 最初沒有元素,其後備數組也包含五個歸零值。
當您對切片進行切片時,您正在建立一個共享相同後備數組的新切片。因此,當您指派 c := b[:2] 時,您將建立一個引用後備陣列的前兩個歸零元素的新切片。因此,c 的長度為 2,包含值 [0,0]。
切片切片的容量
當您對切片進行切片時,切片的容量結果切片由切片表達式的最後一個索引與第一個索引之間的差異確定。在 d := c[2:5] 的情況下,此差異為 3 (5 - 2)。因此,d 的容量為 3。
結論
理解容量和長度對於在 Go 中有效使用切片至關重要。請記住,切片始終引用後備數組,並且容量表示該後備數組的大小。透過對切片進行切片,您可以建立共享相同支援數組並繼承其屬性(包括其容量)的新切片。
以上是Go 切片:容量和長度有什麼差別?的詳細內容。更多資訊請關注PHP中文網其他相關文章!