go語言學習之路三:切片


  前面講了變量的有關知識,這里對於其他的數據類型就不多作介紹,(和C差不多),因此重點來討論下切片。

一、切片是引用類型,這里要稍微介紹兩個概念:值類型,構造類型和引用類型

  1、值類型:是一種由類型的實際值表示的數據類型。如果向一個變量分配值類型,則該變量被附以全新的值的副本,go語言的值類型包括布爾型,整型,浮點型,復數型。

  2、構造類型:和c中差不多,包括數組,結構體和字符串

  3、引用類型:由類型的實際值引用表示的數據類型。如果為某個變量分配一個引用類型,則該變量將應用原始值,不創建任何副本。go語言引用類型包括切片、字典和通道。

  切片通常用來實現變長數組,原型定義如下:

struct Slice

{

  byte *array;

  unit32 len;

  unit32 cap;

};

它抽象為以下三個部分:

  指向被引用的底層數組的指針;切片中元素的個數;切片分配的存儲空間。

二、切片的創建和聲明

  1、基於底層數組創建切片

  var array1=[10]int{1,2,3,4,5,6,7,8,9,10}

  var slice[]int

  slice1=array1[:5]

  slice2=array1[5:]

  slice3=array1[:]

  slice4=array1

  slice5=array1[0:len(array1)]

  自己添加package和import和func main將上面的代碼運行下看看效果,理解基於底層數組創建切片。

  2、直接創建切片

  var slice = []int{1,2,3,4,5}

  3、使用make函數創建切片

  var slice=make([]int,5)//創建一個有5個元素的整型切片slice,元素的初始值為0。

  在使用make()函數創建切片時,還可以為切片元素預留存儲空間:

  var slice=make([]int,5,10)//創建一個有5個元素的整型切片slice,元素的初始值為0,並且預留10個元素的存儲空間。

三、切片元素的訪問和遍歷

  切片的訪問和數組元素的訪問一樣,通過元素下表訪問,或者使用range遍歷所有切片元素.例:

var slice=[]int{1,2,3,4,5}

for i:=0;i<=4;i++{

  fmt.Println(i,slice[i])

}

for i,v:=range slice{

  fmt.Println(i,slice[i])

}

四、切片的操作

  1、切片元素的增加

  使用append()函數向切片尾部添加新元素:

s := make([]string, 3) fmt.Println("emp:", s)
s[0] = "a" s[1] = "b" s[2] = "c"

s = append(s, "d")
s = append(s, "e", "f") fmt.Println("apd:", s)
2、切片的復制:
var slice1=[]int{1,2,3,4,5,6,7,8,9,10}
var slice2=make([]int,3,5)
var n int
n=copy(slice2,slice1)
fmt.Println(n,slice2,len(slice2),cap(slice2))

slice3:=slice[3:6]
n=copy(slice3,slice1[1:5])
fmt.Println(n,slice,slice3)
這段代碼需要讀者好好研究研究,這可以加深對slice引用的是底層數組的理解,運行的結果是:
3 [1 2 3] 3 5
3[1 2 3 2 3 4 7 8 9 10] [2 3 4]
見下圖:


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM