iT邦幫忙

2017 iT 邦幫忙鐵人賽
DAY 13
1
Modern Web

30天就Go:教你打造LINE自動回話機器人系列 第 13

30天就Go(11):資料結構 - Map

從前人智慧進化的語言Golang,當然很多概念也是沿用舊的語言。今天要講的Map其實也不是甚麼新奇的東西,如果你有用過Python,那Map可能就是類似Dictionary的概念,Ruby的hash或是其他語言也都常見類似的項目。


Map

概念

Map的概念就是,一個key對應一個value。假設今天要記錄每位同學的身高,那每位同學的姓名會就是key,身高就會是value,那資料就會記錄成這樣

Key Value
"Tony" 168
"Mary" 159
"Alen" 185

那在資料結構上的呈現就會是這樣:{"Tony": 168, "Mary": 159, "Alen", 185}

要注意的是key會是獨一無二的,"Tony"這個key只會有一個

基本操作

宣告

h := map[string]int{}

宣告一個空白的map,map後[]內的是key的型態,[]後的是value的型態

或是可以用make,make算是宣告資料結構的好幫手

var h = make(map[string]int)

要注意:=和=是不同的

make的另一種寫法

h := make(map[string]int)

設定初始值

其實就只是把值填入{}中而已,格式是{key:value,...}

h := map[string]int{"Tony": 168, "Mary": 159, "Alen", 185}

指定操作

直接將key放上[]內就會取得value了

h["Tony"] // 168

很多人會想,可不可以反查呢?像這樣:

h[168]

答案是沒辦法的,首先key的型態就已經不對了,二是這樣也不會得到"Tony"的結果。試想想,如果今天有兩個人身高都是168不就...

放新的map進去

其實就跟指定操作一樣,不過會是新的key

h["George"] = 163

要注意的是,key獨一無二的特性,如果今天又操作了h["Tony"],那只會對"Tony"進行操作,並不會產生新的map

長度

len()這個function其實在各種你想的到有長度的地方都可以使用,如果Map裡的資料組數太多可以用這個看到底多少阻了

len(h)

刪除key value

直接用delete()就行,也算是滿萬用的function

delete(h, "Tony")

確認key是否存在

if key, exists := h["Mary"]; exists {
    do something
}

這樣會找h中是否有"Mary"這個key,如果有exists=true,沒有則exists = false


上一篇
30天就Go(11):資料結構 - Array
下一篇
30天就Go(12):資料結構 - Slice
系列文
30天就Go:教你打造LINE自動回話機器人23

尚未有邦友留言

立即登入留言