为什么我们不能使用 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上运行为什么是这样?
2 回答
繁花不似锦
TA贡献1851条经验 获得超4个赞
表达式 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。
慕村225694
TA贡献1880条经验 获得超4个赞
它确实有效,您只是在查看错误的切片。
表达式array[2:]
是一个新切片,从array
. 该切片的第 0 个元素是原始切片的第 2 个元素。这样做,你会看到:
for i,value := range array[2:] { fmt.Printf("%d ", value) }
i
范围从 0 到 len(array)-2的值。
- 2 回答
- 0 关注
- 110 浏览
添加回答
举报
0/150
提交
取消