顺序遍历

对于切片的顺序遍历,一般使用range就可以了。

go
  • 01
  • 02
  • 03
  • 04
  • 05
var nums = []int{10,20,30,40,50} for i, value := range nums { // i为索引 // value 为切变值 }

这里有一个问题需要注意一下,如果这里的切片nums不是基本数据类型而是结构体。range遍历出来的value值是拷贝值而并非原结构体,修改value中的值不会改变原切片中的值。如果要遍历修改,可以将切片的结构体改为指针,或都索引来取值。

go
  • 01
  • 02
  • 03
  • 04
  • 05
  • 06
  • 07
  • 08
  • 09
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
type Test struct { A int B string } t1 := Test{ A: 1, B: "1", } t2 := Test{ A: 2, B: "2", } var slice1 []Test slice1 = append(slice1, t1) slice1 = append(slice1, t2) for i := range slice1 { value := &slice1[i] if value.A == 1 { value.A = 11 } } var slice2 []*Test slice2 = append(slice2, &t1) slice2 = append(slice2, &t2) for _, value := range slice2 { if value.A == 2 { value.A = 22 } }

逆序遍历

一般情况下逆序遍历思路就是for size-1到0.

go
  • 01
  • 02
  • 03
for i := len(nums) - 1; i >= 0; i-- { fmt.Println(nums[i]) }

二般的也可以使用range来遍历

go
  • 01
  • 02
  • 03
for i := range nums { fmt.Println(nums[len(nums)-i-1]) }