23.map辞書の使用

2812 ワード

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}]