一、forrange的基本用法
func main() { nums := []int{1, 2, 3, 4, 5} for i, num := range nums { fmt.Println(i, num) } }
以上是forrange最基本的使用方式,将nums里的每个元素分别赋值给num,并将其下标赋值给i。
需要注意的是,对于切片、数组和字符串等类型,forrange会将其转化为对应的迭代器,因此效率比较高。
二、forrange的内置变量与使用技巧
func main() { nums := []int{1, 2, 3, 4, 5} for i := range nums { fmt.Println(i) } for _, num := range nums { fmt.Println(num) } }
以上代码展示了forrange里的两个内置变量:i和_。i表示下标,_表示不使用该变量。
在需要遍历时,如果只需要访问下标,可以使用for i := range nums,不需要访问下标时,可以使用for _, num := range nums,_可以起到占位符的作用,避免了不必要的内存分配。
需要注意的是,forrange中的_与ifelse中的_有区别,ifelse中的_只是占位符,表示省略掉一个返回值,实际上还是在内存中分配了一个变量空间。
三、forrange的迭代方式
func main() { nums := []int{1, 2, 3, 4, 5} for i := 0; i < len(nums); i++ { fmt.Println(i, nums[i]) } }
以上代码展示了forrange的一种替代方式,使用for循环手动实现了forrange的迭代方式。
相比forrange来说代码量略大,但是在一些语言的实现中,使用for循环可以提升效率。
需要注意的是,这种方法在遍历map等无序集合时,并不能保证元素的顺序。
四、forrange的性能问题
基于自己的使用场景,程序员需要在forrange和for循环之间做出选择。如果时间和空间都能承受,使用forrange可读性更强,减少了循环变量的冗余代码。但是,如果程序对性能要求比较高,可以手动使用for循环在迭代时提升效率。
需要注意的是,如果forrange在遍历时修改元素的值,会导致结果不可预期,因为forrange内部使用的是值拷贝。
五、forrange的嵌套使用
func main() { nestedList := [][]int{{1, 2}, {3, 4}, {5, 6}} for _, list := range nestedList { for _, num := range list { fmt.Println(num) } } }
以上展示了forrange的嵌套使用方法,可以方便地遍历多维数组。
需要注意的是,由于forrange中使用了值拷贝,因此嵌套使用时需要特别小心,要确保元素类型不是指针类型,否则会出现意想不到的结果。
原创文章,作者:小蓝,如若转载,请注明出处:https://www.506064.com/n/192672.html