Golang基础-Slice切片

2018-07-29 16:44:28 george518 ...

一、Slice及特点

slice是语言中经常使用的数据结构之一,也叫切片,实际上slice是数组的一段视图,也可以理解为是数组的某一部分的引用。
Slice包含三个部分:

  • ptr:第一个元素的指针
  • len:切片长度
  • cap:切片容量

特点:
切片的扩展,底层的数组可能会变化。
对切片还可以取切片
切片可以向后扩展,容量自动扩展

arr := [10]int{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
//取全部
    slice1 := arr[:]
    fmt.Println(slice1)
    //取下标2到4,前闭后开区间
    slice2 := arr[2:4]
    fmt.Println(slice2)
    //取下标2之后的全部区间
    slice3 := arr[2:]
    fmt.Println(slice3)
    //取到第四个数组,0-3
    slice4 := arr[:4]
    fmt.Println(slice4)
    //对切片还可以取切片,slice2中的下标2到4,前闭后开区间
    slice5 := slice2[2:4]
    fmt.Println(slice5)

result:

[1 2 3 4 5 6 7 8 9 10]
[3 4]
[3 4 5 6 7 8 9 10]
[1 2 3 4]
[5 6]

二、Slice声明定义

定义切片

var s []int //此时没有分配底层数组
s1 := []int{1, 2, 3}
//10表示长度,32表示容量,已经分配了底层数组
s2 := make([]int, 10, 32) 

    fmt.Println(s, s1, s2)

结果:

[] [1 2 3] [0 0 0 0 0 0 0 0 0 0]

可见,var 和make创建slice的结果是不同的

三、slice操作

追加:append,返回新slice

var s []int
s = append(s, 1)
fmt.Println(s)
//[1]

删除:

//删除3元素
ss3 := []int{1, 2, 3, 4, 5, 6}
ss4 := append(ss3[:2], ss3[3:]...)
fmt.Println(ss4)
//[1 2 4 5 6]

拷贝:

ss1 := []int{1, 2, 3}
ss2 := make([]int, 8, 16)
copy(ss2, ss1)
fmt.Println(ss2)
//[1 2 3 0 0 0 0 0]

相似文章