linuxea:go切片的遍历切片操作(23)

遍历切片使用for range和len进行遍历两种简单方式

4.8切片的遍历

  • for len

for循环遍历下nums,nums已经在上面定义了,加上之后如下:

[root@www.linuxea.com /opt/Golang/work2]# cat make3.go
package main
import "fmt"
func main(){
    nums := make([]int,3,5)
    nums[2] = 100
    nums = append(nums,100)
    nums = append(nums,100)
    nums = append(nums,100)
    nums = append(nums,100)
    nums = append(nums,100)
    

    fmt.Println(nums)
    for i :=0;i<len(nums);i++{
        fmt.Println(i,nums[i])
    }
}

运行

[root@www.linuxea.com /opt/Golang/work2]# go run make3.go 
[0 0 100 100 100 100 100 100]
0 0
1 0
2 100
3 100
4 100
5 100
6 100
7 100
  • for range

也可以使用for range遍历

[root@www.linuxea.com /opt/Golang/work2]# cat make2.go
package main
import "fmt"
func main(){
    nums := make([]int,3,5)
    nums[2] = 100
    nums = append(nums,100)
    nums = append(nums,100)
    nums = append(nums,100)
    nums = append(nums,100)
    nums = append(nums,100)
    

    fmt.Println(nums)
    for index,key := range nums {
        fmt.Println(index,key)
    }
}

运行

[root@www.linuxea.com /opt/Golang/work2]# go run make2.go
[0 0 100 100 100 100 100 100]
0 0
1 0
2 100
3 100
4 100
5 100
6 100
7 100

4.9切片的操作

获取3个的元素

nums[0:3]

顺便查看切片的类型

fmt.Printf("%T",nums[0:3])

代码块:

package main
import "fmt"
func main(){
    nums := make([]int,3,5)
    nums[2] = 100
    nums = append(nums,101)
    nums = append(nums,102)
    nums = append(nums,103)
    nums = append(nums,104)
    nums = append(nums,105)
    

    fmt.Println(nums)
    fmt.Println(nums[0:3])
    fmt.Printf("%T",nums[0:3])
}

运行

[root@www.linuxea.com /opt/Golang/work2]# go run make4.go
[0 0 100 101 102 103 104 105]
[0 0 100]
[]int

切片的类型也是一个切片([]int )

  • 切片的第三个元素

此前,在数组中是有第三个元素的,而在切片中也是有的。定义一个新切片,长度为3,容量为10的int类型:

nums := make([]int,3,10)

而后重新声明为n,打印元素,长度,容量。

n := nums[1:3:10]
fmt.Println(n)
fmt.Printf("%T %#v %d %d\n",n,n,len(n),cap(n))

这里获取的容量是通过n的END减去n的start,在上面代码中就是10-1,容量是9,长度是2。如下:

[root@www.linuxea.com /opt/Golang/work2]# go run make5.go
[0 0]
[]int []int{0, 0} 2 9
  • 如果是两个元素呢,定义一个n2,如下:
nums := make([]int,3,10)
n2 := nums[2:3]
fmt.Println(n2)
fmt.Printf("%T %#v %d %d\n",n2,n2,len(n2),cap(n2))

代码块

[root@www.linuxea.com /opt/Golang/work2]# cat make5.go
package main
import "fmt"
func main(){
    nums := make([]int,3,10)
    n2 := nums[2:3]
    fmt.Printf("%T %#v %d %d\n",n2,n2,len(n2),cap(n2))
}

两个元素获取的容量是nums的cap减去n2的start的结果,以上代码中的容量结果是8。n2的长度是1,容量是8。这和三个元素的结果是有差异的。如下:

[root@www.linuxea.com /opt/Golang/work2]# go run make5.go
[0]
[]int []int{0} 1 8
  • 总结

当使用第三个元素切片操作的时候,获取的容量是END(第三个元素)值减去索引的START(开始),得到的是新赋值的容量值。

当使用两个元素切片操作,获取的容量是容量减去索引start。

  • 但是都不能超过make原来的的容量。

这里所值的END和START 是索引的位置。

0 分享

您可以选择一种方式赞助本站

支付宝扫码赞助

支付宝扫码赞助

日期: 2019-12-20分类: Golang

标签: Golang

发表评论