1. 迭代对象是切片,迭代过程中修改切片
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | package main import "fmt" func main() {<!-- --> // 示例1。 numbers1 := []int{<!-- -->1, 2, 3, 4, 5, 6} // 只有一个迭代变量时,i 表示为迭代对应元素的索引值 for i := range numbers1 {<!-- --> if i == 3 {<!-- --> numbers1[i] |= i } } fmt.Println(numbers1) // [1 2 3 7 5 6] fmt.Println() } |
注意:numbers3 为切片
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | package main import "fmt" func main() {<!-- --> numbers3 := []int{<!-- -->1, 2, 3, 4, 5, 6} maxIndex3 := len(numbers3) - 1 for i, e := range numbers3 {<!-- --> if i == maxIndex3 {<!-- --> numbers3[0] += e } else {<!-- --> numbers3[i+1] += e } } fmt.Println(numbers3) // [22 3 6 10 15 21] } |
2. 迭代对象是数组,迭代过程中修改数组
注意:numbers2 为数组
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | package main import "fmt" func main() {<!-- --> numbers2 := [...]int{<!-- -->1, 2, 3, 4, 5, 6} maxIndex2 := len(numbers2) - 1 for i, e := range numbers2 {<!-- --> if i == maxIndex2 {<!-- --> numbers2[0] += e } else {<!-- --> numbers2[i+1] += e } } fmt.Println(numbers2) // [7 3 5 7 9 11] fmt.Println() } |
注意两点:
range 表达式只会在for 语句开始执行时被求值一次,无论后边会有多少次迭代;range 表达式的求值结果会被复制,也就是说,被迭代的对象是rrange 表达式结果值的副本而不是原值;