本系列前面的文章:數組
map是一種映射,能夠將鍵(key
)映射到值(value
),格式爲:map[keyType]valueType
。函數
聲明一個map並初始化它,使用key:value
進行初始化:code
var scores = map[string]int {"數學":100, "語文":90, "Go":100}
若是不想直接初始化,能夠先聲明再使用,注意這樣須要使用make
函數初始化後才能使用:get
var scores map[string]int scores = make(map[string]int)
爲何這樣聲明須要使用make
函數?數學
map
的零值是nil map
,沒有鍵,也不能添加鍵。string
var m map[string]int //聲明一個m map,它如今默認是nil fmt.Println(m) //map[] m["A"] = 1 //報錯:assignment to entry in nil map
因此爲了避免讓該map
不是nil
,須要使用make
初始化:入門
var m map[string]int //nil m = make(map[string]int) //初始化 m["A"] = 1 //添加元素 fmt.Println(m) //map[A:1]
固然,方便的短變量聲明方式也能用:class
m := map[string]int {"A":1, "B":2} 或者 m := make(map[string]int) m["A"] = 1 m["B"] = 2
(增)增長鍵值對:import
scores["數學"] = 100 //向scores這個map添加了鍵爲「數學」,值爲100的數據 scores["語文"] = 90
(刪)刪除鍵值對:基礎
delete(scores, "語文")
(改)修改鍵值對和增長鍵值對的語法相同(當key
不存在時爲增長,當key
存在時爲修改):
scores["語文"] = 10
(查)使用key
能夠查找到對應的value
,會返回兩個值,第一個是key
對應的value
,第二個是布爾值(若是key
存在,是true
;不然是false
)。若是查找的key
不存在,則會返回value
類型的「零值」:
score, exist := scores["數學"] //使用兩個返回值 fmt.Println(score, exist) //100 true score1 := scores["語文"] //使用一個返回值 fmt.Println(score1) //90 score2, exist2 := scores["Java"] //查找不存在的key fmt.Println(score2, exist2) //0 false
和slice
同樣,map
也是引用類型,則意味着,若是有幾個map
同時指向一個底層map
,其中一個map
改變某個鍵值對,那麼其餘的也會作出一樣的改變(由於底層map
變了)。
package main import "fmt" func main() { map0 := make(map[string]string) //底層map0 map0["name"] = "XingXiaoguan" //增長一個鍵值對 //map1 map2 引用map0 map1 := map0 map2 := map0 fmt.Println(map0["name"], map1["name"], map2["name"]) //都是XingXiaoguan map1["name"] = "XingRenGuanXue" //改變map1的name對應的值 fmt.Println(map0["name"], map1["name"], map2["name"]) //所有變爲XingRenGuanXue }
使用len
函數能夠獲取map
中key
的數量:
keyNum := len(scores) //獲取scores這個map中key的數量
map
是無序的,因此其返回的元素順序可能每次都不一樣。
可使用range
關鍵字遍歷map
,這裏range
返回的第一個值是key
,第二個值是value
:
//遍歷scores map for key, value := range scores { fmt.Println(key, value) } 輸出: 數學 100 語文 90
若有錯誤,還請指正。
點擊 這裏認識我 。 (^o^)/