了解切片後切片容量減少
在 Go 中,切片是一種靈活的資料結構,表示底層陣列的連續部分。當您對切片進行切片時,您會建立一個引用原始切片資料子集的新切片。
為什麼 s = s[2:] 會減少容量,而 s = s[:4 ] 和 s = s[:0] 不?
行 s = s[:4] 擴展了切片的長度以包括原始切片的前四個元素。這不會改變容量,因為底層數組仍然有足夠的容量來容納擴展的切片。
另一方面,s = s[:0] 建立一個長度為零的切片。容量保持不變,因為底層數組仍然有容量容納原始元素。
但是, s = s[2:] 會刪除切片的前兩個元素。這將建立一個新切片,該切片引用從索引 2 開始的原始切片的子集。容量會減少,因為新切片不再能夠存取前兩個元素。
你能恢復第一個元素嗎使用 s = s[2:] 刪除後兩個元素?
不,在使用 s = 切片後無法恢復前兩個元素s[2:]。切片會建立一個新切片,並帶有指向底層數組的新指標。當您從開頭刪除元素時,指標將會移至新的起始索引,舊元素將無法存取。
以上是為什麼對 Go 切片進行切片有時會減少容量,但並非總是如此?的詳細內容。更多資訊請關注PHP中文網其他相關文章!