1. 迭代对象是切片,迭代过程中修改切片
package mainimport "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 为切片
package mainimport "fmt"func main() {numbers3 := []int{1, 2, 3, 4, 5, 6}maxIndex3 := len(numbers3) - 1for 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 为数组
package mainimport "fmt"func main() {numbers2 := [...]int{1, 2, 3, 4, 5, 6}maxIndex2 := len(numbers2) - 1for 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
表达式结果值的副本而不是原值;