【Go入門】mapの基本

Go
スポンサーリンク

ここではGo言語のmapの基本について扱っていきます。

mapはキーと値ので構成されます。その値にキーでアクセスすることをができるので、辞書型のデータの操作に似ています。

mapの基本について見ていきましょう。

スポンサーリンク

mapの宣言

mapの宣言をやって行きましょう。

mapは次のようにキーと値で構成します。

map[キーの型名]値の型名{キー: 値, キー: 値, ..., キー: 値}

mapキーワードに続けて角括弧[]でkeyの型名を指定し、続けてvalueの型名を指定。続けて波括弧{}にキーと値をコロンで対応させて定義して行きます。

具体的なコードを見て行きましょう。

package main

import "fmt"

func main() {

	m := map[string]int{"リンゴ": 100, "イチゴ": 200, "オレンジ": 300}
	fmt.Println(m)

}

keyにstring型、valueにint型を指定して、果物の名前と数字をセットにして定義して出力処理をしています。

実行すると次のように出力されます。

map[イチゴ:200 オレンジ:300 リンゴ:100]

辞書型のデータと似ていますが、mapと最初に表示されてキーと値が表示されるのも特徴です。

また、mapはデータの順番が保証されないことに注意が必要です。定義した順番と違って出力されているのがわかると思います。

スポンサーリンク

mapの値にアクセス

mapは、キーを指定することで値にアクセスしてデータを操作することができます。これによって、データをすばやく検索することができるのが特徴となります。

キーの指定は角括弧[]に入れて行います。

先ほどのコードに追加する形で見てみましょう。

package main

import "fmt"

func main() {

	m := map[string]int{"リンゴ": 100, "イチゴ": 200, "オレンジ": 300}
	fmt.Println(m)
	fmt.Println(m["リンゴ"])
	m["イチゴ"] = 500
	fmt.Println(m)
	m["バナナ"] = 400
	fmt.Println(m)

}

まず、「リンゴ」のキーを指定して、値を出力しています。

次は「イチゴ」のキーを指定して、値を変更しています。

最後は「バナナ」のキーを新しく指定して、値を新たに追加しています。

実行するとこうなります。

map[イチゴ:200 オレンジ:300 リンゴ:100]
100
map[イチゴ:500 オレンジ:300 リンゴ:100]
map[イチゴ:500 オレンジ:300 バナナ:400 リンゴ:100]

値を取り出し、値を変更し、値を追加という処理がされているのがわかります。

次のように、mapの値を定義せずにmakeを使って作成し、値を後から追加することもできます。

package main

import "fmt"

func main() {

	m2 := make(map[string]int)
	m2["マンゴー"] = 1000
	fmt.Println(m2)

}

次のように値を定義していない(mapに無い)キーを指定するとどうなるかを見てみましょう。

package main

import "fmt"

func main() {

	m := map[string]int{"リンゴ": 100, "イチゴ": 200, "オレンジ": 300}
	fmt.Println(m)
	fmt.Println(m["特に無し"])

	v, isOk := m["リンゴ"]
	fmt.Println(v, isOk)

	v2, isOk2 := m["特に無し"]
	fmt.Println(v2, isOk2)

}

mapに定義しなかったキー「特に無し」を指定して出力しています。

また、vとisOkという変数を使って、値とその存在について出力する処理を行っています。

実行結果は次のようになります。

map[イチゴ:200 オレンジ:300 リンゴ:100]
0
100 true
0 false

値の無いキーを指定すると「0」が出力されます。

値がある物については、値とtrueが、無いものには0とfalseが出力されているのがわかります。

スポンサーリンク

Pythonコードで書くと…

Pythonにもmap関数というものはありますが、ちょっとここでのGoの使い方とは違う感じです。

ここではGoのmapのデータ構造に似た辞書型のコードでPythonのコードを書いてみます。

def main():

    m = {"リンゴ": 100, "イチゴ": 200, "オレンジ": 300}
    print(m)
    print(m["リンゴ"])
    m["イチゴ"] = 500
    print(m)
    m["バナナ"] = 400
    print(m)


if __name__ == "__main__":
    main()

Goでのコードと同じように、データを定義し、キーを指定して値を出力、キーを指定して値の変更、新しいキーを使って値の追加の処理を行っています。

結果は次のとおり。

{'リンゴ': 100, 'イチゴ': 200, 'オレンジ': 300}
100
{'リンゴ': 100, 'イチゴ': 500, 'オレンジ': 300}
{'リンゴ': 100, 'イチゴ': 500, 'オレンジ': 300, 'バナナ': 400}

辞書型のデータになっていること以外、結果は同じです。

ただし、Go言語のmapの時と違って、定義していないキーを指定するとエラーになります。

スポンサーリンク

最後に

ここでは、Go言語のmapを使ったデータ構造の基本を見て来ました。

map[key]valueの形で、データ型を指定して定義します。辞書型のデータ構造に似ています。

キーを指定することで値の操作が出来ます。

mapのデータは順番は保証されませんが、キーを扱うことでデータを素早く検索することができるのが特徴です。

Go
スポンサーリンク
CodeGraffitiをフォローする

タイトルとURLをコピーしました