美文网首页
day02-07clice

day02-07clice

作者: 李超_2292 | 来源:发表于2020-03-15 22:01 被阅读0次

    切片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
    

    相关文章

      网友评论

          本文标题:day02-07clice

          本文链接:https://www.haomeiwen.com/subject/ntjqjhtx.html