首页 > 编程开发 > Go语言 > Go内建容器之切片(slice)
2019
03-09

Go内建容器之切片(slice)

切片(slice)是一种数据结构,这种数据结构便于使用和管理数据集合。切片是围绕动态数组的概念构建的,可以按需自动增长和缩小。切片的动态增长是通过内置函数append来实现的,这个函数可以快速且高效地增长切片。还可以通过对切片的再次切片来缩小一个切片的大小。因为切片的底层内存也是在连续块中分配的,所以切片还能获得索引、迭代、及为垃圾回收优化的好处。

slice的创建和初始化

1.通过数组创建

arr := [...]int{0,1,2,3,4,5,6,7}
s := s[2:6]       //s == {2,3,4,5}, s[0]==2

2.使用make函数声明空切片

slice1 := make([]int,5)  //长度和容量均为5
slice2 := make([]int,3,5)   //长度为3,容量为5(长度不能大于容量)

3.通过切片字面量来声明切片

slice := []string{"red","yellow","blue","green"}   //长度和容量均为4

4.使用索引声明切片

slice := []string{99: ""}    //使用空字符初始化第100个元素

5.创建nil切片

var slice []int

6.声明空切片

slice1 := make([]int,0)
slice2 := []int{}

注:声明数组和声明切片的不同

array := [3]int{1,2,3}
slice := []int{1,2,3}    //[]中为空

slice的扩展

arr := [...]int{0,1,2,3,4,5,6,7}
s1 := arr[2:6]
s2 := s1[3:5]

注:(1) s1的值为[2 3 4 5] ,s2的值为[5 6]

(2) slice只可以向后扩展,不可以向前扩展

(3) s[i]不可以超越len,向后扩展不可以超过底层数组的cap

append的使用

1.向slice添加元素

s1 := []int{0,1,2,3,4,5}
s2:= s1[0:3]
s2 = append(s2,30)   //s2的len+1
s1 = append(s1,6)    //s1的len+1,cap翻倍(当cap小于1000时)

注:(1) 添加元素时如果超过cap,系统会重新分配更大的底层数组

(2) 由于值传递的关系,必须接收append的返回值

2.删除元素

s := []int{0,1,2,3,4,5}
s:= append(s[:3],s[4:]...)   //删除值为3的原s[3],len-1

3.合并slice

s1 := []int{1,2}
s2 := []int{3,4}
fmt.Println(append(s1,s2...))  //输出[1 2 3 4]

对slice的首尾操作

head := slice[0]  //取头元素
tail := slice[len(slice)-1]  //取尾元素
slice = slice[1:]  //删除头元素
slice = slice[:len(slice)-1]  //删除尾元素

copy

s := [...]int{0, 1, 2, 3, 4, 5, 6, 7}
s1 := s[2:6]   //2 3 4 5
s2 := s[0:3]   //0 1 2
copy(s1, s2)
fmt.Println(s1)  //输出[0 1 2 5]

 

最后编辑:
作者:lwg0452
这个作者貌似有点懒,什么都没有留下。
捐 赠如果您觉得这篇文章有用处,请支持作者!鼓励作者写出更好更多的文章!

留下一个回复

你的email不会被公开。