遍历切片使用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 %dn",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 %dn",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 %dn",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 是索引的位置。