Go 切片元素索引:為什麼s[lo:hi] 以元素hi-1 結束
在Go 切片中,表達式s [lo:hi] 計算從位置lo 到位置hi-1 的元素切片。這可能看起來違反直覺,因為人們可能期望它包含元素 hi。然而,這個決定背後有幾個設計原理。
這種方法的一個優點是指標運算。在 C 等語言中,陣列表示為指向其第一個元素的指標。使用 0 索引陣列和包含獨佔切片簡化了元素位址的計算,因為元素 i 的位址只是陣列指標加 i。
其次,此索引方案允許透過指定來提取原始切片arr[0:len(arr)].這在將資料讀入切片,然後提取非空切片而無需額外操作的情況下非常有用。
最後,它可以防止索引重疊。這意味著當將數組劃分為具有連續索引的子切片時,這些切片完全覆蓋整個數組。這有助於基於非連續整數拆分數組等操作,如下面的程式碼片段所示:
func consecutiveSlices(ints []int) [][]int { ret := make([][]int, 0) i, j := 0, 1 for j < len(ints) { if ints[j] != ints[j-1] + 1 { ret = append(ret, ints[i:j]) i = j } } ret = append(ret, ints[i:j]) return ret }
s[lo:hi] 包含元素 hi 會更直觀嗎?是的,也許對於初學者來說。然而,0 索引數組和包含-獨佔切片的優點,包括簡化的指針運算、無縫切片提取和非重疊索引,超過了直觀的包含-包含切片的好處。
以上是為什麼 Go 的 `s[lo:hi]` 切片排除第 `hi` 個元素?的詳細內容。更多資訊請關注PHP中文網其他相關文章!