day02-07clice

2020-03-15  本文已影响0人  李超_2292

切片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
上一篇 下一篇

猜你喜欢

热点阅读