Go語言入門系列(四)之map的使用

本系列前面的文章:數組

1. 聲明

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

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

3. 其餘用法

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函數能夠獲取mapkey的數量:

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
若有錯誤,還請指正。

4. 關於我

點擊 這裏認識我 。 (^o^)/
相關文章
相關標籤/搜索