登录
首页 >  Golang >  Go问答

Go 的数组切片内置范围的行为时而不一致

来源:stackoverflow

时间:2024-02-20 15:51:24 377浏览 收藏

小伙伴们对Golang编程感兴趣吗?是否正在学习相关知识点?如果是,那么本文《Go 的数组切片内置范围的行为时而不一致》,就很适合你,本篇文章讲解的知识点主要包括。在之后的文章中也会多多分享相关知识点,希望对大家的知识积累有所帮助!

问题内容

为什么我们不能使用内置的 range 来指定给定数组索引的下限,但我们可以指定索引的上限?

给定一个 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 上运行演示

这是为什么?


正确答案


表达式 array[2:] 计算结果为新的切片值。问题在于应用程序假设新切片中的元素与 ararray 中的相应元素具有相同的索引。

以下是解决该问题的几种方法。

使用范围值:

for _, v := range array[2:] {
   fmt.printf("%d ", v)
}

新切片的索引:

s := array[2:]
for i := ranges s {
   fmt.printf("%d ", s[i])
}

当像 array[:5] 那样从末尾进行切片时,新切片中的元素与 array 中的相应元素具有相同的索引。

它确实有效,您只需查看错误的切片。

表达式 array[2:] 是一个新切片,从 array 的第二个元素开始。该切片的第 0 个元素是原始切片的第二个元素。这样做,你会看到:

for i,value := range array[2:] {
        fmt.Printf("%d ", value)
}

i 的值范围从 0 到 len(array)-2。

今天关于《Go 的数组切片内置范围的行为时而不一致》的内容介绍就到此结束,如果有什么疑问或者建议,可以在golang学习网公众号下多多回复交流;文中若有不正之处,也希望回复留言以告知!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>