Go基础知识复习之append和copy

上一篇我们已经知道go语言的切片基本用法
今天介绍append和copy


append

append切片添加元素

语法:

append(切片的变量名,元素)

用法:

//初始化一个切片
s1 := []string{"beijing","shanghai","guangzhou"}
fmt.Println(s1) //[beijing shanghai guangzhou]

//往s1添加一个元素 shenzhen
s1 = append(s1,"shenzhen")
fmt.Println(s1)//[beijing shanghai guangzhou shenzhen]

通过上述示例,我们就知道如何使用append往切片中添加元素了
需要注意的是 添加元素的过程中 必须用所操作的的变量去接收

append之后引发的容量变化

还是引用上述的例子
每次添加元素会导致切片的的容量按照一定的规则进行扩展,规则如下:

  1. 申请的容量大于原来的两倍 新的容量就是申请的容量
  2. 如果小于1024 那么新的是旧的两倍
  3. 如果大于1024 按照1.25倍去扩展

我们通过代码来检验一下!

//初始化一个切片
s1 := []string{"beijing","shanghai","guangzhou"}
//打印容量
fmt.Println(cap(s1))//3

//往s1添加一个元素 shenzhen
s1 = append(s1,"shenzhen")
fmt.Println(cap(s1))//6

//往s1添加一个元素 shenzhen
s1 = append(s1,"hangzhou")
fmt.Println(cap(s1))//6

添加切片到切片中

... 表示切片

s1 := []string{"beijing","shanghai","guangzhou"}
s2 := []string{"wuhan","xian","suzhou"}
//将s2添加到s1中
s1 = append(s1,s2...)
fmt.Println(s1)

append实现删除元素

在写代码之前,我们可以把append这个函数理解成 参数1的切片 加上参数2的切片或者是单个元素
组成一个新的切片
所以,原理是删除的元素的左边作为一个左切片,删除的元素的右边作为一个右切片
左右相加就成功组成一个新的切片作为删除后的结果了!

s1 := []string{"beijing","shanghai","guangzhou"}
s2 := []string{"wuhan","xian","suzhou"}
//将s2添加到s1中
s1 = append(s1,s2...)
fmt.Println(cap(s1))
//去掉s1中的wuhan
s1 = append(s1[:5],s1[6:]...)
fmt.Println(s1)//此时已经去掉了wuhan
fmt.Println(cap(s1))

通过上面的示例 我们也可以看到 删除元素是不影响 切片的容量的!

copy

复制切片

//创建切片1
c1 := []int{1,2,3}
//定义切片 
c2 := make([]int,3)
//复制c1到c2
copy(c2,c1)
fmt.Println(c2)

//此时去修改c1的值的元素值 那么是否会影响到c2呢
c1[0] = 6
fmt.Println(c1,c2) //[6 2 3] [1 2 3]

这里的make 会单独出来讲!
可以看到 复制之后 去改变原数据的值是不会影响到新复制的数据值


关于appendcopy的介绍现到这里,有什么不清楚和有问题的地方欢迎在评论区留言
未完待续。。。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章