HOWTO · Go

Go でマップにキーが含まれているかどうかを確認する方法

Go の Map で key の値を取得しようとすると、2つの戻り値が取得されます。2 番目の値が true の場合、キーはマップ上に存在します。

このページの内容

ハッシュテーブルは、Go に map データ型として実装されています。Go のマップは、順序付けられていないキーと値のペアのコレクションとして表示できます。マップ map は、高速な検索、追加、削除を実行できるため、Go で最も強力で用途の広いデータ型の 1つです。map の key の値を取得しようとすると、2つの戻り値を取得します。2 番目の値が true の場合、key は map に存在します。

Go のマップ map の構造

map の構文

var map_name map[KeyType]ValueType

ここで、KeyType は比較可能な任意の datatype であり、ValueType も map 自体を含む任意の datatype でもあります。map 内のすべての keys の datatype は同じでなければなりません。同様に、map 内のすべての values の datatype も同じである必要があります。ただし、keys の datatype と values の datatype は異なる場合があります。

package main

import "fmt"

func main() {
	map_1 := map[string]string{
		"Jenna": "Sthapit",
	}

	for k, v := range map_1 {
		fmt.Printf("Key:%v\nValue: %s\n", k, v)
	}

}

出力:

Key:Jenna
Value: Sthapit

上記の例では、map_1 は keys と values の両方に string データ型を持っています。map_1 では、Sthapit はキー Jenna の値です。

Go map で key を確認する

Go map でに key が含まれているかどうかを確認する構文

first_value, second_value := map_name[key_name]

上記のステートメントは、2つの値を返します。first_value と second_value。first_value は key の値を与えます。map_name に key_name が含まれていない場合、first_value はデフォルトのゼロ値になります。同様に、second_value はブール値で、key_name が map に存在する場合に true になります。first_value と second_value を異なる方法で解釈して、map_name に key_name が含まれているかどうかを確認できます。

package main

import "fmt"

func main() {
    map_name := map[int]string{
        0: "Alok",
        1: "Reman",
        2: "Riken",
        3: "Rudra",
    }
    _, second_value_1 := map_name[1]
    fmt.Printf("second_value for 1: %t\n", second_value_1)

    _, second_value_9 := map_name[9]
    fmt.Printf("second_value for 9: %t\n", second_value_9)
}   

出力:

second_value for 1: true
second_value for 9: false

ここでは、map_name にキー 0 が存在するため、0 の second_value は true です。ただし、キー9 が map_name に存在しないため、9 の second_value は false です。

package main

import "fmt"

func main() {
    map_name := map[string]string{
        "Giri":     "Alok",
        "Nembang":  "Reman",
        "Maharjan": "Riken",
        "Jha":      "Rudra",
    }
    if first_value, second_value := map_name["Giri"]; second_value {
        fmt.Printf("Giri is present in map. Value is: %s\n", first_value)
    } else {
        fmt.Printf("Giri is not present in map.\n")
    }

    if first_value, second_value := map_name["Sthapit"]; second_value {
        fmt.Printf("Sthapit is present in map. Value is: %s\n", first_value)
    } else {
        fmt.Printf("Sthapit is not present in map. \n")
    }
}
   

出力:

Giri is present in map. Value is: Alok
Sthapit is not present in map.

この例では、if ステートメントを使用して、map に key が存在するかどうかを確認しました。Giri は key であり、Sthapit は map_name の key ではありません。