Golang學習筆記-1.14 Maps

來源:互聯網
上載者:User

本文系第十四篇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

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.