天天看點

Golang筆記之複合資料類型(數組,切片,map)

數組是具有相同資料類型的元素組成的一組長度固定的序列,數組的長度不可變化,數組元素是可修改的。

數組聲明需要指定組成元素的類型以及元素的個數(長度),長度是數組類型的一部分,數組被聲明後,數組長度不可修改,數組元素會根據對應類型的零值進行初始化。

在聲明時初始化值

使用初始化元素數量推導數組長度

指定位置初始化

關系運算符==,!=,隻能比較長度與類型一緻的數組

擷取數組長度可以使用len函數

數組的通路與修改使用索引,索引從0開始,到數組長度-1為止

擷取數組的一部分作為切片

array[start:end]/array[start:end:cap](end<=cap<=len)

周遊數組可以使用for+len函數和for range兩種方法

多元數組就是數組中的元素也是數組

多元數組的聲明與初始化與數組基本一緻,使用初始化元素數量推導數組長度隻有第一維數組可使用

切片(Slice)是一個擁有相同類型元素的可變長度的序列,是長度可變的數組,切片由三部分組成

指針:指向切片第一個元素指向的數組元素的位址

長度:切片元素的數量

容量:切片開始到結束位置元素的數量

切片聲明需要指定組成元素的類型,但不需要指定存儲元素的數量(長度)。在切片聲明後,會被初始化為nil,表示暫不存在的切片

使用字面量初始化

使用字面量初始化空切片

指定長度和容量字面量初始化

使用make函數初始化

使用數組切片操作初始化

擷取切片長度和容量

通過對編号對切片元素進行通路和修改,元素的編号從左到右依次為:0, 1, 2, …, n(n為切片長度-1)

切片建立新的切片,切片結束位置小于原切片容量,新建立切片長度和容量計算:len: end-start, cap: src_cap-start,

切片共享底層數組,若某個切片元素發生變化,則數組和其他有共享元素的切片也會發生變化

周遊,同數組一緻

切片複制:複制元素數量為 src元素數量和 dest元素數量的最小值

新增元素

使用 append對切片增加一個或多個元素并傳回修改後切片,當長度在容量範圍内時隻增加長度,容量和底層數組不變。當長度超過容量範圍則會建立一個新的底層數組并對容量進行智能運算(元素數量<1024時,約按原容量 1倍增加,>1024時約按原容量 0.25倍增加)

移除元素

先進先出

先進後出

切片的元素也是切片,就是多元切片

映射是存儲一系列無序的 key/value對,通過 key來對 value進行操作(增、删、改、查)。

映射的 key隻能為可使用==運算符的值類型(字元串、數字、布爾、數組),value可以為任意類型。

map聲明需要指定組成元素key和value的類型,在聲明後,會被初始化為nil,表示暫不存在的映射

使用字面量初始化空映射

擷取元素數量

通路

判斷key是否存在

修改與增加

使用 key對映射指派時當 key存在則修改 key對應的 value,若 key不存在則增加 key和value

删除

周遊