23. map字典的使用

map是一組鍵和值的組合。在map內是無序的。你可以隨時加入或刪除一個鍵及鍵對應的值。
想查看所有鍵值,使用range遍歷好了。
想找到唯一的鍵值,那要使用鍵來得到值。
map的創建必須使用make

m := make(map [string]int)

我們可以把這個map當作是一組人的名字和年齡,然后這樣寫入鍵值。

    m := make(map [string]int)
    m["Anna"] = 16
    m["Tom"] = 15
    m["Smith"] = 17

直接打印map

fmt.Println(m)

運行結果

map[Anna:16 Tom:15 Smith:17]

如果需要挨個分析處理,那么需要遍歷,并且判斷后再加上處理語句。比如,我們給值為 17 的加一個特殊的顯示標記“* --> ”

//遍歷,分別處理
    for k, v := range m {
        if v == 17 {fmt.Print("* --> ")}
        fmt.Println(k, v)
    }

當然,你也可以直接對你感興趣的map鍵調用。

m["Anna"] = 17
fmt.Println(m)

這個時候的打印輸出就會發現,Anna的值也是 17 了。
如果,你只是想判斷一下,map內是否已經有某個鍵了,可以這樣寫

    kv, ok := m["anna"]
    fmt.Println(kv, ok)
    kv1, ok1 := m["Anna"]
    fmt.Println(kv1, ok1)

查看輸出的結果。比較就會發現,當鍵不存在時,返回的值為零值,而同時我們得到了一個 false 的檢測結果。我們可以使用這個方法來判斷map中某個鍵是否存在。
我們還需要知道,如何刪除一個已經存在的元素。很簡單的,只要直接 delete就行。像這樣

delete(m, "Anna")
fmt.Println(m)

觀察打印結果,發現 Anna 已經不見了。
完整代碼

package main

import "fmt"

func main() {
    m := make(map [string]int)
    m["Anna"] = 16
    m["Tom"] = 15
    m["Smith"] = 17

    fmt.Println(m)

    //遍歷,分別處理
    for k, v := range m {
        if v == 17 {fmt.Print("* --> ")}
        fmt.Println(k, v)
    }

    m["Anna"] = 17
    fmt.Println(m)

    kv, ok := m["anna"]
    fmt.Println(kv, ok)
    kv1, ok1 := m["Anna"]
    fmt.Println(kv1, ok1)

    delete(m, "Anna")
    fmt.Println(m)
}

運行結果

map[Anna:16 Tom:15 Smith:17]
Anna 16
Tom 15
* --> Smith 17
map[Anna:17 Tom:15 Smith:17]
0 false
17 true
map[Tom:15 Smith:17]

下面來展示一個復雜一點的例子。map元素值的類型是一個結構體。

package main

import (
    "fmt"
)

type Vertex struct {
    Lat, Long float64
}

var m map[string]Vertex

func main() {
    m = make(map[string]Vertex)
    m["Bell Labs"] = Vertex{
        40.68433, -74.39967,
    }
    m["Bei Jing"] = Vertex{39.26, 115.25}
    fmt.Println(m)
    fmt.Println("--------I'm just a line.---------------")
    for lat, _ := range m {
        fmt.Println(lat, ":", m[lat].Lat, m[lat].Long)
    }
    delete(m, "Bei Jing")
    fmt.Println(m)
}

運行結果

map[Bell Labs:{40.68433 -74.39967} Bei Jing:{39.26 115.25}]
--------I'm just a line.---------------
Bell Labs : 40.68433 -74.39967
Bei Jing : 39.26 115.25
map[Bell Labs:{40.68433 -74.39967}]
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容