Golang之slice操作
生活随笔
收集整理的這篇文章主要介紹了
Golang之slice操作
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1、創建
一般使用make創建,make([]string,0)
var s []int或s:=new([]int) //nil切片, 切片是nil,即Slice內的指針是nil var t = []int{}或var u = make([]int, 0) //空切片,Slice內的指針指向長度為0的底層數組 var u = make([]int, 3) //3個內部元素是零值2、追加
append時會首先使用可用容量cap部分,如果cap不夠擴容就會分配一個新的底層數組,并將所有元素拷貝至新地址。并且新的底層數組會按照一定策略進行擴容:在切片的容量小于1000個元素時會成倍地增加容量,一旦元素個數超過1000容量的增長因子會設為1.25,即每次增加25%的容量。
3、截取
?
左閉右開;截取slice時如果沒有指定max,則容量跟隨原數組;
其實截取時底層數組不變,改變的是起始位置、len、cap;
4、刪除
需要先知道要刪除的元素的下標index,且s1[:index]指的是[0, index)區間的元素,左閉右開。
var s1 = []int{1, 2, 3, 4} // 初始化一個切片 var index = 2 // 要刪除的下標 s1 = append(s1[:index], s1[index+1:]...) //刪除下標為index的元素5、拷貝
切片之間的賦值只會拷貝Slice結構體,使用copy深拷貝時要確保目的切片有足夠且相等的空間。
copy(目標切片,源切片),拷貝過程中是直接對應位置的拷貝
var s1 = []int{1, 2} // 初始化一個切片 var s2 = make([]int, 2) // 初始化一個空的切片,cap為2 copy(s2, s1) // 將s1拷貝給s2 s2[0] = 99 // 改變s2[0] fmt.Println(s1[0]) // 打印s1[0]6、二維切片
對于二維切片,只能手動去為第二維度分配空間。
var s = make([][]int, n) for i := 0; i < n; i++ { s[i] = make([]int, n) }總結
以上是生活随笔為你收集整理的Golang之slice操作的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 面试官问:HTTP 的负载均衡你了解么?
- 下一篇: Golang之channel操作