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的介紹現到這裏,有什麼不清楚和有問題的地方歡迎在評論區留言
未完待續。。。

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