這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。
跟著碼術一起學習Golang語言。今天學習的是Go語言內建的資料結構:字典(map)。
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
字典(Map)
字典(map)是Go語言內建的資料結構,一組索引值對的無序集合。
有些地方稱之為映射。本文中一律成為字典(map)。
字典(map)也叫做關聯陣列。因為數組通過索引來尋找元素,而字典通過鍵(key)來尋找元素。
字典(map)的容量只受到記憶體的限制。在一個字典中,所有的鍵都是唯一的,並且必須支援==和!=操作符的類型。如果試圖賦值給同一個鍵,後賦值的值將會覆蓋原有值。
map的建立和填充
map的定義有兩種:
1、初始化資料的定義方式。
2、使用make函數來定義。
輸出結果:
Map literal at "one" is: 1
Map created at "key2" is: 3.141590
Map assigned at "two" is: 3
Map literal at "ten" is: 0
其中mapLit使用方法一定義;而mapCreated使用方法二。
---------------------------------------------
map的使用過程中需要注意以下幾點:
1、map是無序的,每次列印出來的map都不會一樣,它不能夠通過index擷取,而必須通過key擷取;
2、map的長度不是固定的。和slice類似,map也是一種參考型別;
3、內建的len函數同樣適用於map,返回map擁有的key的數量;
4、map的值可以很方便的修改。
map的訪問
當訪問元素所對應的鍵存在於字典中,那麼肯定沒有問題,能夠獲得對應的元素。但是如果不存在呢?
這個時候會返回零值,對於字串的零值就是"",對於整數的零值就是0.
但是會存在這樣的情況:
這個時候會輸出:0。但是這個就與A索引值對應的值混淆了。Go提供一種方法來解決這個問題。
此時使用X["E"]有兩個傳回值。一個是值,一個是否存在該鍵的bool型變數。
也就是:
_, ok := map1[key1] // ok == true if key1 is present, false otherwise
map的刪除元素
Go語言提供了內建函數delete,這個函數可以用來從字典中刪除元素。
輸出結果:
刪除元素前map長度為4,刪除之後長度為3.<這裡使用len函數擷取map的長度>。
此外,如果你試圖刪掉一個不存在於map的鍵,程式不會報錯。只是不會對map有任何影響。
for...range結構
---------------------------------------------
for...range結構可以用於map。
for key, value := range map1 {
//do something
}
第一傳回值為鍵(key),第二個傳回值為值(value)。這兩個值是僅僅作用於for迴圈內部的局部變數。例如:
輸出結果:
這裡我們同時能看出,map是無序的。
---------------------------------------------
如果你只關心值(value),可以這麼使用:
for _, value := range map1 {
//do something
}
輸出結果:
---------------------------------------------
如果你只關心鍵(key),可以這麼使用:
for key := range map1 {
fmt.Printf(“key is: %d\n”, key)
}
輸出結果:
--------------------總結--------------------
到今天為止我們學習了go語言所有的內建類型。
包括:布爾型、數值型、字串、數組、slice和map。
---------------------------------------------
歡迎關注碼術!一起學習Golang語言。