4.3 切片的操作
一、向slice添加元素
使用
append关键字s1 := [...]int{1, 2, 3, 4, 5, 6} s2 := s1[:5] s3 := append(s2, 7) s4 := append(s3, 8)结果:
初始s1=[1 2 3 4 5 6] s2=[1 2 3 4 5] s3=[1 2 3 4 5 7] s4=[1 2 3 4 5 7 8] 最后s1=[1 2 3 4 5 7]
原因:
添加元素如果超过cap,系统会重新分配更大的底层数组
由于值传递的关系,必须接收append的返回值
s = append(s, val)
二、创建切片
默认创建切片有多中方式:
// 公用的函数:查看Slice的内容以及len,cap func printSlice(s []int) { fmt.Printf("V= %v,len=%d, cap=%d\n", s, len(s), cap(s)) }默认空Slice,后续向内填充内容时候自动扩充
// 创建Slice var s []int // 添加内容 for i := 0; i < 100; i++ { printSlice(s) s = append(s, 2*i+1) } // 输出内容 fmt.Println(s)备注:默认创建的Slice为nil(相当于null,就是空)
自动扩充的cap为2n次方,len <= cap
创建指定长度的Slice
// 赋予初始值的方式 s1 := []int{2, 4, 6, 8} printSlice(s1) // 设置cap值的方式 s2 := make([]int, 16) printSlice(s2)备注:赋予初始值的方式,len与cap值相同
设置cap值的方式,len=cap,但值都为0
指定len与cap的方式
// 设置lan与cap的方式 s3 := make([]int, 10, 32) printSlice(s3)备注:设置了len为10,cap为32,且默认填充内容数量为len默认值都为0
三、复制Slice
将某个slice复制到另一个slice中
备注:将s1复制到s2中
s1=[2 4 6 8]
s2=[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]
复制后s2=[2 4 6 8 0 0 0 0 0 0 0 0 0 0 0 0]
如果反向复制,那么s2能复制到s1中的内容只有s1的len个(从前向后)
四、删除Slice(很少操作)
删除中间的数字
备注:利用append函数进行拼接,使用切片的开闭原则进行拼接,单后面片接的内容是可变长度,因此可以使用
...进行指代删除后,结果的len会减一,cap不变
五、删除头尾
删除头部内容
备注:使用切片操作进行删除头
删除尾部内容
备注:同样使用切片方式进行删除
备注:头尾删除跟从中间删除是相同的,结果得到的Slice的len都会发生变化,而cap不会改变
Last updated
Was this helpful?