我有以下代码段
for _, val := range Arr {
// something have to do with val
}
在Arr中,可能有多个元素。我想跳过Arr的第一个元素,并从第二个元素继续循环。
例如,如果Arr包含{1,2,3,4}。通过查询,我只想取{2,3,4}。
是否有一种方法可以使用范围查询来实现?
我有以下代码段
for _, val := range Arr {
// something have to do with val
}
在Arr中,可能有多个元素。我想跳过Arr的第一个元素,并从第二个元素继续循环。
例如,如果Arr包含{1,2,3,4}。通过查询,我只想取{2,3,4}。
是否有一种方法可以使用范围查询来实现?
for _, val := range Arr[1:] {
// something to do with val
}
或者如果你可以得到一个空切片:
for i := 1; i < len(Arr); i++ {
// something to do with Arr[i]
}
使用标准的for
循环或切片操作符:
for _, val := range Arr[1:] {
// Do something
}
// Or
for i := 1; i < len(Arr); i++ {
val = Arr[i]
// Do something
}
for i := 1; i < ...
很好地处理了空切片,而其他答案没有提供这个功能。 - kubanczyk将其转换为切片,然后跳过第一个元素(使用范围查询):
package main
import "fmt"
func main() {
Arr := [...]int{1, 2, 3, 4}
for _, val := range Arr[1:] {
fmt.Println(val)
}
}
使用索引跳过第一个元素(带有范围查询):
package main
import "fmt"
func main() {
Arr := [...]int{1, 2, 3, 4}
for i, val := range Arr {
if i == 0 {
continue
}
fmt.Println(val)
}
}
使用一个布尔变量跳过第一个元素(在范围查询中):
package main
import "fmt"
func main() {
Arr := [...]int{1, 2, 3, 4}
first := true
for _, val := range Arr {
if first {
first = false
continue
}
fmt.Println(val)
}
}
如果你想对第一个值进行不同的操作,可以这样做:
for i, val := range Arr {
if i == 0 {
//Ignore or do something with first val
}else{
// something have to do with val
}
}
for _, val := range Arr[len(Arr)-(len(Arr)-1):] {
// something have to do with val
}
请使用这个
for _, val := range Arr[1:] {
// something have to do with val
}
len(Arr)-(len(Arr)-1) = 1
(算一下吧!),所以你可以省去两个函数调用(谁知道,可能Go编译器会捕捉到这个),然后你的答案就和 https://dev59.com/iFoU5IYBdhLWcg3we20R#37429331 以及 https://dev59.com/iFoU5IYBdhLWcg3we20R#37429317 一样了。 - Gwyneth Llewelyn
运行时错误:切片越界
。请参考T. Claverie的答案。 - kubanczyk