上一篇我們已經知道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之後引發的容量變化
還是引用上述的例子
每次添加元素會導致切片的的容量按照一定的規則進行擴展,規則如下:
- 申請的容量大於原來的兩倍 新的容量就是申請的容量
- 如果小於1024 那麼新的是舊的兩倍
- 如果大於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 會單獨出來講!
可以看到 複製之後 去改變原數據的值是不會影響到新複製的數據值
關於append
和copy
的介紹現到這裏,有什麼不清楚和有問題的地方歡迎在評論區留言
未完待續。。。