切片
切片
/* 不定长,但是定类型 就是 切片 */
初始化一个切片
//初始化一个没有元素的整型切片 var a[]int =[]int{} //make方式创建一个0长度的整型切片 a :=make([]int,0)
创建和查询切片
1 package main 2 3 import "fmt" 4 5 func main(){ 6 7 8 9 //创建一个普通切片 10 var x =[10]int{1,2,3,4,5,6,7,8,9,10} 11 12 //这个是数组的切片 切出来的一部分内容。 13 // 切片的底层是一个数组 14 //切片 是顾头不顾尾 15 16 //x1 :=x[0:5] //含头不含尾 17 // x2 :=x[:5] //默认从开头截取 18 //x3 :=x[5:] //默认截到最后 19 x4 :=x[:] //从头到尾 20 fmt.Printf("x的类型是%T,数值是%v\n",x,x) //x的类型是[10]int,数值是[1 2 3 4 5 6 7 8 9 10] 21 fmt.Printf("x4的类型是%T,数值是%v\n",x4,x4) //x4的类型是[]int,数值是[1 2 3 4 5 6 7 8 9 10] 22 23 24 25 26 //也可以 对切片 进行 截取 切片的切片 27 xx4 := x4[5:7] 28 fmt.Println(xx4) //[6 7] 29 30 31 32 33 }
切片追加元素
1 package main 2 3 import "fmt" 4 5 func main(){ 6 7 //初始化一个没有元素的整型切片 8 var a[]int =[]int{} 9 10 //查询当前切片的长度 11 fmt.Printf("切片长度是%d,数值是%v\n",len(a),a) //切片长度是0,数值是[] 12 13 14 15 16 //切片内追加元素 17 a = append(a,0) 18 a = append(a,0,1,2,3,4,5,6) 19 fmt.Printf("切片长度是%d,数值是%v\n",len(a),a) //切片长度是8,数值是[0 0 1 2 3 4 5 6] 20 21 22 //遍历查询01 23 for i:=0;i<len(a);i++{ 24 fmt.Println(a[i]) 25 } 26 27 28 //遍历查询02 29 for a,b := range a{ 30 fmt.Printf("第%v个长度是%v\n",a,b) 31 } 32 33 }
切片之间的合并
1 package main 2 3 import "fmt" 4 5 func main() { 6 var ( 7 a1 = []int{1, 2, 3} 8 b2 = []int{4, 5, 6} 9 ) 10 11 12 //兼并切片 利用for 循环进行追加内容 13 for _, values := range b2 { 14 a1 = append(a1, values) 15 } 16 fmt.Println(a1) //[1 2 3 4 5 6] 17 18 19 20 //粗暴方式 另外一种方式 21 a1 = append(a1, b2...) 22 fmt.Println(a1) //[1 2 3 4 5 6] 23 24 25 26 27 }
切片自动扩容的规律
1 /* 2 使用make([]int,len) 创建指定初始长度的切片,容量默认为0 3 使用make([]int,len,cap) 创建指定初始长度和容量的切片 4 后续的扩容策略依然是: 先翻一倍,在俩个俩个的递增。 5 */ 6 7 8 9 package main 10 11 import "fmt" 12 13 func main() { 14 15 16 17 //make方式, 创建一个0长度的整型切片 18 a :=make([]int,0) 19 a2 :=make([]int,0,5) 20 a3 :=make([]int,3,5) 21 22 //len是长度,cap 是容量 23 fmt.Printf("切片的长度为%v,容量为%v\n",len(a),cap(a)) //切片的长度为0,容量为0 24 fmt.Printf("切片的长度为%v,容量为%v\n",len(a2),cap(a2)) //切片的长度为0,容量为5 25 fmt.Printf("切片的长度为%v,容量为%v\n",len(a3),cap(a3)) //切片的长度为3,容量为5 26 27 28 29 30 31 32 }