首頁 >後端開發 >Golang >為什麼 Go 的 `s[lo:hi]` 切片排除第 `hi` 個元素?

為什麼 Go 的 `s[lo:hi]` 切片排除第 `hi` 個元素?

Mary-Kate Olsen
Mary-Kate Olsen原創
2024-12-08 15:30:10260瀏覽

Why Does Go's `s[lo:hi]` Slice Exclude the `hi`-th Element?

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

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