golang自學之路4-切片與數組

一:閒話雜談:

之前在學數組,結果意外的把[...]裏面的...省略了,還自以爲定義了一個數組。結果自己大錯特錯。前面不加...是表示切片。

所以現在要來了解一下兩者的規則:

golang中數組和切片的區別:

  • 切片時指針類型,數組是值類型
  • 數組的長度是固定的,而切片不是(切片是動態的數組)ps:數組前面的[]裏面不寫數字,寫成[...]可以動態推斷長度的
  • 切片比數組多一個屬性:容量(cap)。數組和切片都通樣有個len(),元素個數
  • 切片的底層是數組

另外,根據第一點來看,切片是指針類型,那麼在裏面進行 操作都屬於引用傳遞,會動態改變其中的值

數組呢,是值傳遞,按理來說並沒有一直改變其中某個元素的值。

二:切片的幾個用法:

2.1 類似於python裏面,可以對一個可迭代對象用中括號進行取區間

numbers := []int{0,1,2,3,4,5,6,7,8}  
fmt.Println("numbers[1:4] ==", numbers[1:4])
切片初始化
s :=[] int {1,2,3 } 
直接初始化切片,[]表示是切片類型,{1,2,3}初始化值依次是1,2,3.其cap=len=3

s := arr[:] 
初始化切片s,是數組arr的引用

s := arr[startIndex:endIndex] 
將arr中從下標startIndex到endIndex-1 下的元素創建爲一個新的切片

s := arr[startIndex:] 
默認 endIndex 時將表示一直到arr的最後一個元素

s := arr[:endIndex] 
默認 startIndex 時將表示從arr的第一個元素開始

s1 := s[startIndex:endIndex] 
通過切片s初始化切片s1

s :=make([]int,len,cap) 

以上粘貼自菜鳥驛站,哦不,菜鳥教程~。都很好理解,和python的用法基本一樣的。

2.2 幾個函數,len(),cap(),append(),copy()

由於python萬物皆是對象,比如數組,直接就能調用.append方法,同js一樣

a = []
a.append(1)

golang的話 寫法就跟易語言一樣的了,append函數等同於易語言的加入成員(數組變量,成員變量)

var numbers []int
numbers = append(numbers, 0)

對於copy方法:

numbers1 := make([]int, len(numbers), (cap(numbers))*2)
copy(numbers1,numbers)

第一個參數是待複製的切片,第二個是想要被複制的切片

至於len()方法和cap()方法,用於切片取長度和切片容量,其中容量是切片獨有的,len()是通用的,這些無需多說了 吧。都會。

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