切片slise
切片的定义
var s1 [] int //定义一个存放int类型的切片
var s2 []string //定义一个存放string类型元素的切片
fmt.Println(s1,s2)
// [] []
fmt.Println(s1 == nil)
//true
fmt.Println(s2 == nil)
//true
初始化
s1 = []int{1,2,3}
s2 = []string{"沙河","张江","平山村"}
fmt.Println(s1,s2)
//[1 2 3] [沙河 张江 平山村]
fmt.Println(s1 == nil)
//false
fmt.Println(s2 == nil)
//false
长度len和容量cap
fmt.Printf("len(s1):%d cap(s1):%d\n",len(s1),cap(s1))
//len(s1):3 cap(s1):3
由数组得到切片
a1 := [...]int{1,3,5,7,9,11,13}
s3 := a1[0:4] //基于一个数组切割,左包含右不包含,也叫做左闭右开(就是从索引0开始到4结束,不包含4)
s5 := a1[:4] // =>[0:4]
s6 :=a1[3:0] // =>[3:len(a1)]
s7 := a1[:] // => [0:len(a1)]
fmt.Println(s3,s5,s6,s7)
//[1 3 5 7] [1 3 5 7] [7 9 11 13] [1 3 5 7 9 11 13]
切片的容量cap是指底层数组从切片的第一个元素到最后的元素数量,就是原数组从开始切的位置算到结束位置
fmt.Printf("len(s5):%d cap(s5):%d\n",len(s5),cap(s5))
//len(s5):4 cap(s5):7
fmt.Printf("len(s6):%d cap(s6):%d\n",len(s6),cap(s6))
//len(s6):4 cap(s6):4
切片指向了一个底层的数组
切片的长度就是它元素的个数
切片的容量是底层数组从切片的第一个元素到最后一个元素的数量
切片是引用类型,都指向了底层的一个数组,数组变量,切片也变了,相当于快捷方式或Linux的软连接
要判断一个切片是否是空的,要用len(s) == 0 判断
切片在切片
s8 := s6[:2]
fmt.Printf("len(s8):%d cap(s8):%d\n",len(s8),cap(s8))
//len(s8):2 cap(s8):4
网友评论