Edited at

【Go】基本文法⑤(連想配列・ Range)


概要

【Go】基本文法①(基礎)

【Go】基本文法②(フロー制御文)

【Go】基本文法③(ポインタ・構造体)

【Go】基本文法④(配列・スライス)

に引き続きGoの基本を学習します。

今回は Maps(連想配列)Range に焦点を当てて学習しました。


Maps(連想配列)

配列が整数値を使って要素を指定するのに対し、Maps連想配列キー (key) というデータを使って要素を指定するデータ構造です。

Ruby で言う HashPython で言う dictionary にあたります。


Maps(連想配列)の宣言方法

Maps(連想配列) は主に以下のように宣言します。

①組み込み関数make()を利用して宣言

②初期値を指定して宣言


①組み込み関数make()を利用して宣言

組み込み関数 make() 関数は指定された型の、初期化され使用できるようにしたマップを返します。

make() を利用する際には以下の様にマップの初期化を行います。

make(map[キーの型]値の型, キャパシティの初期値)

make(map[キーの型]値の型)// キャパシティの初期値は、省略も可能

組み込み関数のmake() によって作成された Maps(連想配列) に以下の様に keyvalue を入れる事ができます。

map[keyの値] = valueの値

実際に以下の様に Maps(連想配列) を作成する事ができます。

func main() {

map_ex := make(map[string]string, 2) //マップの宣言
fmt.Println(map_ex) //=> map[] //宣言された空のマップ

map_ex["first_name"] = "Mike" //マップにkeyとvalueを挿入する。
map_ex["last_name"] = "Smith"

fmt.Println(map_ex) //=> map[last_name:Smith first_name:Mike]
}


②初期値を指定して宣言

組み込み関数 make() を使用せずとも、以下の様に初期値を指定して宣言する事で、Maps(連想配列) を作成する事ができます。

var 変数名 map[key]value = map[key]value{key1: value1, key2: value2, ..., keyN: valueN}

実際に以下の様に Maps(連想配列) を作成する事ができます。

var map_ex = map[string]string{"first_name":"John", "last_name": "Smith"}

func main() {
fmt.Println(map_ex) //=> map[last_name:Smith first_name:Mike]
}


Maps(連想配列)のゼロ値

Maps(連想配列)の初期値を指定しない場合、変数は nil (nil マップ) に初期化されます。

nil マップ は要素を格納することができず、要素を格納する場合はマップの初期化を行う必要があります。

map [キーの型] 値の型

// map の後ろの [ ] にキーの型を、その後ろに値の型を指定します。

var map1 map[string]int

func main() {
fmt.Println(map1) //=> map[] //nilマップ
}


Maps(連想配列)への要素の挿入や更新

以下の様にMaps(連想配列)への要素の挿入や更新を行う事ができます。

map[key] = elem

実際に上記の方法で挿入や更新ができる事を確認します。

func main() {

map_ex := make(map[string]int)
map_ex["ele1"] = 1 //要素の挿入
fmt.Println(map_ex)

map_ex["new_ele"] = 2 //要素の更新
fmt.Println(map_ex)
}


Maps(連想配列)からの要素の取得

以下の様にMaps(連想配列)からの要素の取得を行う事ができます。

map[key]

実際に上記の方法で要素の取得ができる事を確認します。

func main() {

map_ex := map[string]string{"first_name":"John", "last_name": "Smith"}

fmt.Println(map_ex["first_name"]) //=> John
fmt.Println(map_ex["last_name"]) //=> Smith
}


Maps(連想配列)の要素の削除

以下の様にMaps(連想配列)の要素の削除を行う事ができます。

delete(map_ex, key)

実際に上記の方法で要素の削除ができる事を確認します。

func main() {

map_ex := map[string]string{"first_name":"John", "last_name": "Smith"}
delete(map_ex, "first_name") //map_exの"first_name"を削除

fmt.Println(map_ex["first_name"]) //=>
fmt.Println(map_ex["last_name"]) //=> Smith
}


Range( forrange節)

range は、Slices(スライス) や、Maps(マップ) をひとつずつ反復処理するために使います。

スライスを range で繰り返す場合、range は反復毎に2つの変数を返します。

1つ目の変数は インデックス( index ) で、2つ目は インデックスの場所の要素(value) です。

var slice = []string{"Golang", "Ruby", "Javascript", "Python"}

func main() {
for index, value := range slice {
fmt.Println(index, value)
//=> 0 Golang
//=> 1 Ruby
//=> 2 Javascript
//=> 3 Python
}
}


indexvalue の省略

インデックスや値は、 _ へ代入することで省略することができます。

インデックスのみが必要な場合は以下の様になります。

var slice = []string{"Golang", "Ruby", "Javascript", "Python"}

func main() {
for index, _ := range slice {
fmt.Println(index)
//=> 0
//=> 1
//=> 2
//=> 3
}
}

バリューのみが必要な場合は以下の様になります。

var slice = []string{"Golang", "Ruby", "Javascript", "Python"}

func main() {
for _, value := range slice {
fmt.Println(value)
//=> Golang
//=> Ruby
//=> Javascript
//=> Python
}
}


参考

My journey of Go⑤

お気軽Goプログラミング(forのrange節)

はじめてのGo言語