Go言語:map使用ノート
1614 ワード
余暇に、Go言語のコードを少し書いてみて、細部の問題が多いことに気づいて、忘れてください.
Goのmapはhash mapです.C++のmapはtree(主流の実装は赤黒樹)であり、C++のhash mapはunordered_mapである.
mapの定義と初期化
mapは参照タイプなので、上記で定義したmの値はnilです.読み取り操作の場合、nil mapの動作はempty mapの動作と同様に「ゼロ値」を返します.書き込み操作ではnil mapがpanicします.
make関数を使用してmapを初期化できます.mはempty mapになります.
もう1つのempty mapを定義して初期化する方法.
mapを定義し、2つの値を挿入します.
mapの基本操作
keyが存在し、対応するvalueを返します.keyが存在しない場合は「ゼロ値」を返します.
keyが存在する場合okはtrue、そうでない場合falseです.
余分なコードでキーが存在するかどうかをチェックする必要はありません.キーが存在しない場合、k_vs[kv.Key]はnil slicesを返し、appendはnil slicesを自動的に作成します.
keyが存在する場合は削除します.keyが存在しなければ、何の役にも立たない.
mapの長さを返します.
1つのmapを遍歴すると,遍歴の順序は不確定である.
Goのmapはhash mapです.C++のmapはtree(主流の実装は赤黒樹)であり、C++のhash mapはunordered_mapである.
mapの定義と初期化
var m map[string]int
if m == nil {
fmt.Println("Map m is nil.")
}
a := m["k0"]
fmt.Println(a) // 0
m["k0"] = 123 // panic
mapは参照タイプなので、上記で定義したmの値はnilです.読み取り操作の場合、nil mapの動作はempty mapの動作と同様に「ゼロ値」を返します.書き込み操作ではnil mapがpanicします.
m := make(map[string]int)
if m != nil {
fmt.Println("Map m is not nil.")
}
make関数を使用してmapを初期化できます.mはempty mapになります.
m := map[string]int{}
if m1 != nil {
fmt.Println("Map m1 is not nil.")
}
もう1つのempty mapを定義して初期化する方法.
m := map[string]int{
"k1": 11,
"k2": 22,
}
mapを定義し、2つの値を挿入します.
mapの基本操作
i := m["k1"]
fmt.Println(i)
keyが存在し、対応するvalueを返します.keyが存在しない場合は「ゼロ値」を返します.
i, ok := m["k1"]
keyが存在する場合okはtrue、そうでない場合falseです.
k_vs := make(map[string][]string) // k_vs means key-values
k_vs[kv.Key] = append(k_vs[kv.Key], kv.Value)
余分なコードでキーが存在するかどうかをチェックする必要はありません.キーが存在しない場合、k_vs[kv.Key]はnil slicesを返し、appendはnil slicesを自動的に作成します.
delete(m, "k1")
keyが存在する場合は削除します.keyが存在しなければ、何の役にも立たない.
len(m)
mapの長さを返します.
for k, v := range m {
fmt.Println("Key:", k, "Value:", v)
}
1つのmapを遍歴すると,遍歴の順序は不確定である.