切片:slice
理解为变长的数组A:切片创建
s1:=[]int{1,2,3,4,5}
s2:=make([]T,len,cap)
arr := [5]int{1,2,3,4,5}
s3 := arr[start:end] // 切割数组:[start,end)
s4:=arr[:]
B:切片的类型:
[]数据类型
切片属于引用类型:
s1:=[] int{1,2,3,4}
s2:=s1
package main import "fmt" func main() { /* 数组的特点: 有序(有下标),可以重复,数据可以被修改,但是长度不能修改(定长)。 切片:变长,长度可以改变。 容器: len(),cap() */ // 创建数组 a := [4]int{1,2,3,4} fmt.Println(len(a)) fmt.Println("数组的:",len(a),cap(a)) // 创建切片1.直接创建 s1 := [] int{1,2,3,4,5,6,7,8} fmt.Println(s1) fmt.Println("切片的:",len(s1),cap(s1)) // 8 8 fmt.Printf("%T\n", s1) // []int s2 :=[]int{} // 创建了一个空的切片 fmt.Println(len(s2), cap(s2)) // 0 0 // 2.使用make([]T, len,cap) cap如果不给数值,那么和len一致。 s3 := make([]int, 3, 8) fmt.Println(s3) // [0 0 0] fmt.Println(len(s3),cap(s3)) // 3 8 //3.在数组的基础上创建切片 b := [10]int{1,2,3,4,5,6,7,8,9,10} s4 := b[2:6] // 数组名[start:end) fmt.Println(s4)//[3 4 5 6] fmt.Println(len(s4), cap(s4)) // 4 8 s5 := b[:6] // [0:6],从头开始,切割刀下标6(不包含6) fmt.Println(s5) s6 :=b[6:] // [start:],从start开始,切割刀最后 fmt.Println(s6) //s7 := b[4:12] // invalid slice index 12 (out of bounds for 10-element array) //fmt.Println(s7) }
关键字
len()测量数组或者切片的长度
cap()测量切片的总长度 ,如果超出最大值,切片会扩容
append()增加切片中的内容可以传值,也可以把两个切片拼在一起
append(slice, ele1,ele2,ele3) append(slice1,slice2...)
copy()拷贝切片
package main import "fmt" func main() { /* copy(dst,src) */ s1:=[]int{1,2,3,4,5} s2:=[]int{7,8,9} fmt.Println(s1) fmt.Println(s2) //copy(s1,s2) //将s2拷贝到s1中 //copy(s2, s1) // 将s1中的数据,拷贝到s2中。 //copy(s2, s1[2:4])// 将s1中3-4 的数据,拷贝到s2中 copy(s2[1:] , s1[2:4]) fmt.Println(s1) fmt.Println(s2) }