Go语言for…range循环:索引与值引发的遍历结果差异
Go语言的for…range循环在遍历切片或数组时,其返回值的含义容易被误解,从而导致遍历结果与预期不符。本文将通过示例说明for…range循环与传统for循环在遍历切片时的差异。
以下代码演示了这个问题:
func examplefunc(arr []int) { arr[0] = 100 arr[1] = 101}func main() { arr := make([]int, 2, 5) examplefunc(arr) // 错误的for...range循环用法 for i, v := range arr { fmt.Printf("%d ", i) // 输出索引 } fmt.Println() // 输出:0 1 // 正确的for循环用法 for i := 0; i < len(arr); i++ { fmt.Printf("%d ", arr[i]) // 输出值 } fmt.Println() // 输出:100 101 // 正确的for...range循环用法 for _, v := range arr { fmt.Printf("%d ", v) // 输出值 } fmt.Println() // 输出:100 101}
登录后复制
代码中,examplefunc函数修改了切片arr的值。第一个for…range循环试图打印修改后的切片元素,但输出结果为0 1,与examplefunc函数修改后的值100 101不一致。第二个for循环则正确地输出了100 101。
立即学习“go语言免费学习笔记(深入)”;
原因在于for…range循环的返回值。遍历切片时,它返回两个值:索引和值。第一个for…range循环只使用了索引i,忽略了值v,因此输出了索引值而不是元素值。
为了正确使用for…range循环遍历切片并获取元素值,可以使用_忽略索引值,如第三个循环所示。这样,for…range循环将正确输出100 101,与第二个for循环的结果一致。 因此,理解for…range循环的返回值是正确使用该循环的关键。
以上就是Go语言for range循环:为什么索引和值会造成遍历结果差异?的详细内容,更多请关注【创想鸟】其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。
发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2538094.html