從前人智慧進化的語言Golang,當然很多概念也是沿用舊的語言。今天要講的Map其實也不是甚麼新奇的東西,如果你有用過Python,那Map可能就是類似Dictionary的概念,Ruby的hash或是其他語言也都常見類似的項目。
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不就...
其實就跟指定操作一樣,不過會是新的key
h["George"] = 163
要注意的是,key獨一無二的特性,如果今天又操作了h["Tony"],那只會對"Tony"進行操作,並不會產生新的map
len()這個function其實在各種你想的到有長度的地方都可以使用,如果Map裡的資料組數太多可以用這個看到底多少阻了
len(h)
直接用delete()就行,也算是滿萬用的function
delete(h, "Tony")
if key, exists := h["Mary"]; exists {
do something
}
這樣會找h中是否有"Mary"這個key,如果有exists=true,沒有則exists = false