一、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/zh-tw/n/192672.html