為什么我們不能使用 builtrange來指定給定陣列索引的下限,但我們可以指定索引的上限?
給定一個 int 切片:
array := []int{4, 76, -29, 3, 9, 223, 0, -3, -44, 76, 3, 98, 62, 144}
我想覆寫切片,不包括前兩個元素。
我可以用 for 回圈來做到這一點:
for i := 2; i < len(array); i {
fmt.Printf("%d ", array[i])
}
但不能使用內置的range:
for i := range array[2:] {
fmt.Printf("%d ", array[i])
}
奇怪的是,我可以排除上限范圍內的元素,如下所示:
for i := range array[:5] {
fmt.Printf("%d ", array[i])
}
在Go Playground上運行它
為什么是這樣?
uj5u.com熱心網友回復:
運算式 array[2:] 計算為新的切片值。問題是應用程式假設新切片中的元素與 中的相應元素具有相同的索引 array。
以下是解決該問題的幾種方法。
使用范圍值:
for _, v := range array[2:] {
fmt.Printf("%d ", v)
}
索引到新切片:
s := array[2:]
for i := ranges s {
fmt.Printf("%d ", s[i])
}
當從末尾切片時array[:5],新切片中的元素與 中的相應元素具有相同的索引array。
uj5u.com熱心網友回復:
它確實有效,您只是在查看錯誤的切片。
運算式array[2:]是一個新切片,從 的第二個元素開始array。該切片的第 0 個元素是原始切片的第二個元素。這樣做,你會看到:
for i,value := range array[2:] {
fmt.Printf("%d ", value)
}
對值i從0至LEN(陣列)-2。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/352554.html
上一篇:轉換命令列引數以用作結構欄位
下一篇:用于將函式解組為結構的正確模式?
