本文系第十四篇Golang語言學習教程
What is maps?
map是在 go 中將鍵(key) 與值(value)關聯的內建類型. 通過相應的鍵可以擷取到值.
建立 map
通過向 make
函數傳入鍵和值的類型, 可以建立 map. make(map[type of key]type of value)
是建立 map 的文法.
money := make(map[string]int)
以上建立了一個名為money
的map, 其中鍵的類型是string
, 值的類型是int
.
map 初始值為空白, 需要給 map 添加元素
給 map 添加元素
給 map 添加元素的文法和數組相同.
例1:
package mainimport "fmt"func main() { money := make(map[string]int) //建立 一個名為 money 的 map money["xunk"] = 20000 money["ergou"] = 30000 money["jobs"] = 40000 //給 money 添加元素 fmt.Println("money's map is ", money)}
上面的程式輸出為 : money's map is map[xunk:20000 ergou:30000 jobs:40000]
也可以在聲明的時候初始化 map.
例2:
package mainimport "fmt"func main() { money := map[string]int { "xunk" : 2000, "ergou" : 3000, "jobs" : 4000, } money["bill"] = 6000 fmt.Println("money's map is ", money)}
以上程式在聲明 map 時添加了三個元素, 之後又添加了 bill , 程式輸出為:
money's map is map[xunk:2000 ergou:3000 jobs:4000 bill:6000]
鍵不一定只能是 string 類型。所有可比較的類型,如 boolean,interger,float,complex,string 等,都可以作為鍵。
擷取 map 中的元素
擷取 map 的元素文法為:map[key]
package mainimport "fmt"//make(map(type of key)type of value)func main() { money := map[string]int { //聲明時添加值 "xunk" : 2000, "ergou" : 3000, "jobs" : 4000, } money["bill"] = 6000 name := "jobs" fmt.Println("the money of ", name, "is ", money[name])}
以上程式擷取了 jobs 的錢數, 並列印出來. 程式輸出為: the money of jobs is 4000
如果擷取一個不存在的元素, map 會返回一個該類型就元素的零值. 如上程式中, 我們擷取一個不存在的鍵, 會返回 int
類型的值 0
.
money := map[string]int { //聲明時添加值 "xunk" : 2000, "ergou" : 3000, "jobs" : 4000, } money["bill"] = 6000 fmt.Println("the money of danny is ", money["danny"])}
程式輸出為: the money of danny is 0
查看 map 中是否存在這個 key , 文法為: value, ok := map[key]
money := map[string]int { //聲明時添加值 "xunk" : 2000, "ergou" : 3000, "jobs" : 4000, } money["bill"] = 6000 newname := "jenny" value, ok := money[newname] if ok == true { fmt.Println("jenny's money is ", value) } else { fmt.Println(newname,"not found") }}
以上程式中, 如果 ok
= true , 則表示這個鍵存在, 對應的值是value
, 反之則不存在.
程式輸出為:
jenny not found
遍曆 map 中的元素, 需要用到for range
迴圈:
for key, value := range money{ fmt.Printf("map[%s] = %d\n", key, value) }
以上程式輸出為:
map[xunk] = 2000
map[ergou] = 3000
map[jobs] = 4000
map[bill] = 6000
刪除 map 中的元素
刪除 map 中的元素文法是: delete(map,key)
, 這個函數沒有傳回值.
book := map[string]int { "bainiangudu" : 3, "fooled" : 2, "blockchain" : 1, } delete(book, "bainiangudu") fmt.Println(book)}
以上程式中刪除了鍵 bainiangudu
, 程式輸出為:
map[fooled:2 blockchain:1]
map 是參考型別
和 slice 一樣, map 也是參考型別, 當 map 被賦值一個新變數時, 它們指向同一個內部資料結構, 當改變其中一個變數時, 就會影響到另一個.
newmoney := money newmoney["xunk"] = 5000 fmt.Println(money["xunk"])
以上程式中, 將 money
賦值給 newmoney
, 然後改變 newmoney
中的 xunk
值, 則 money
中的 xunk
值也發生改變. 程式輸出為:
5000
以上為學習Golang maps篇