国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Golang > 正文

golang常用手冊之切片(Slice)原理

2020-04-01 19:00:04
字體:
來源:轉載
供稿:網友

切片,這是一個在go語言中引入的新的理念。它有一些特征如下:

  1. 對數組抽象
  2. 數組長度不固定
  3. 可追加元素
  4. 切片容量可增大
  5. 容量大小成片增加

我們先把上面的理念整理在這里,但是實際的還是要擼碼來解決問題。

定義或申明切片

首先我們看看申明切片:

var sliceName []type

定義完成后,我們需要定義切片:

sliceName = make([]type, len)

也可以適當簡寫:

sliceName := make([]type, len)

在上面的例子中,我們申明了一個切片,我們現在先運行看看結果。

package mainimport "fmt"func main() { sliceName := make([]string, 3) fmt.Printf("切片slice_name的長度:len=%d /n", len(sliceName))} //運行結果如下: /* * 切片slice_name的長度:len=3  */

那么看到這里小伙伴們是不是發現切片,也就是我們普通的一個數組,那么它憑什么叫做切片呢?

我么可以看到另外一個make函數: make([]T, length, capacity)

在上面的capacity是數組的容量,length則是數組的長度。當新插入元素后長度超過容量,則會自動增加一個容量來填裝數據,但是 切片的空間大小是 capacity的整數倍 。demo如下:

package mainimport "fmt"func main() { sliceName := make([]string, 3, 15) fmt.Printf("切片slice_name的長度:len=%d cap=%d /n", len(sliceName), cap(sliceName)) sliceName[0] = "程先生" fmt.Println(sliceName) //運行結果如下: /* * 切片slice_name的長度:len=3 cap=15  * [程先生 ] */ }

初始化切片

任何變量或常量在使用之前都需要初始化,不過常量是直接把申明和初始化寫在一起的。我們來看看切片的初始化:

//初始化數組 arr := [] int{1, 2, 3} fmt.Println(arr) //初始化切片 sliceName 是 數組arr 的引用 sliceName := arr[:] fmt.Println(sliceName) //當然切片引用數組的標準寫法是: s := arr[startIndex:endIndex] //其中startIndex和endIndex都可以省略。 //省缺startIndex則是數組下標為0,endIndex省略則是下標為 len-1 //運行結果如下: //[1 2 3] //[1 2 3]   sliceName1 := arr[1:3] fmt.Println(sliceName1) //截取切片元素下標從 1開始到3但是并不包括3 并復制給切片sliceName1 //運行結果:[2 3]

當然切片也會存在空對象nil的情況,在你申明后不初始化的情況下則會產生nil。

切片的增刪改查

當我們創建了一個切片后,我們需要對切片的元素進行增加該怎么辦呢? 我們可以看到內置append函數: func append(slice []Type, elems ...Type) []Type,代碼如下:

//首先我們需要先把原來的切片和欲添加元素作為參數加入到append函數中,  //并且append會返回一個新的切片,所以代碼如下: sliceName = append(sliceName, 4) fmt.Println(sliceName) //運行結果如下: // [1 2 3 4]

當然我們順帶看下 copy函數如下:

// The copy built-in function copies elements from a source slice into a destination slice.// Copy returns the number of elements copied, which will be the minimum of len(src) and len(dst).func copy(dst, src []Type) int// 上面的說明中指出 我們目標切片接受源數組,并且返回被拷貝的元素個數。

當然,go語言并沒有提供內置的remove函數,但是我們可以通過append函數實現,如下:

//移除某個position的元素//主要思路就是把該位置之前的數據和后面的數據組合到一起并賦值給原先的數組sliceName = append(sliceName[:position],sliceName[position+1:]...)

總結

  1. 切片其實就是數組
  2. 切片的數組大小是能夠變化的
  3. 切片的容量增加是整數倍的
  4. 任何對象都有可能為空nil
  5. 內置函數append和copy的使用

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VEVB武林網。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 阿尔山市| 拉孜县| 武定县| 得荣县| 鹤壁市| 枣庄市| 出国| 东台市| 通河县| 青冈县| 襄城县| 图木舒克市| 乳源| 石河子市| 滁州市| 抚顺县| 怀化市| 敦化市| 和政县| 沙田区| 荔波县| 林西县| 梨树县| 文安县| 德清县| 建瓯市| 曲沃县| 奈曼旗| 聊城市| 襄汾县| 远安县| 曲松县| 清水河县| 麟游县| 上蔡县| 姜堰市| 清河县| 临高县| 漠河县| 日喀则市| 特克斯县|