GolangのMap(連想配列)について総まとめ

Golang

map(連想配列)は最も便利なデータ構造の1つです。キーとバリューのペアで保存でき、キーの重複は許されません。

本記事では、プログラミング言語Goにおいてどのようにmap(連想配列)を実装しているかを学びます。

map(連想配列)とは?

mapとは、キーとバリューのペアを格納する箱です。mapを使用すると高速で効率的な検索が可能です。

{
  key: value
}

またmapは、キーの重複は許さないが、値の重複は可能です。

Goにおけるmapの宣言

では、Goでmapを宣言する方法を見ていきましょう。

package main
 
import (
    "fmt"
)
 
func main() {
    var names map[int]string    // int型のキーと文字列のバリューを持つ
}

上記の例では、キーはint型であり、バリューはstring型である。

mapの初期化

mapをvalueで初期化する方法を見てみましょう。

make()関数の使用する場合

関数make()は、以下のようにマップを初期化するために使用することができます。

package main
 
import (
    "fmt"
)
 
func main() {
    var names = make(map[int]string)
    names[0] = "Tanaka"
    names[1] = "Kato"
 
    fmt.Println(names)  // map[0:Tanaka 1:Kato]
}

リテラル構文の使用する場合

mapは、マップリテラルの構文を使って初期化することができます。

以下はそれを説明する例です。先ほどと同じコードを、マップリテラルを使って初期化するように変更してみよう。

package main
 
import (
    "fmt"
)
 
func main() {
    var names = map[int]string {
        0: "Tanaka",
        1: "Kato",   // 最後にカンマが必要
    }
     
     
    fmt.Println(names)  // map[0:Tanaka 1:Kato]
}

Golangでmap(連想配列)の基本操作

mapのキーを挿入、削除、取得する方法について見てみましょう。

mapに要素を追加する

キーの追加は2つの方法で行うことができます。

初期化時にキーを挿入するか、インデックス構文を使って初期化するかです。

package main
 
import (
    "fmt"
)
 
func main() {
    var names = make(map[int]string)
     
    names[0] = "Suzuki"    // インデックスで挿入
    names[1] = "Yoshida"
     
    fmt.Println(names)  // map[0:Suzuki 1:Yoshida]
}

mapからvalueを取得する

以下のように、インデックス表記を用いて、キーに関連するバリューをmapから取得することができます。

package main
 
import (
    "fmt"
)
 
func main() {
    var names = make(map[int]string)
     
    names[0] = "Suzuki"    // インデックスで挿入
    names[1] = "Yoshida"
     
    fmt.Println(names[1])  // Yoshida
}

keyが存在するかどうかを確認する

package main
 
import (
    "fmt"
)
 
func main() {
    var names = make(map[int]string)
     
    names[0] = "Suzuki"
    names[1] = "Yoshida"
     
    fred, exists := names[0]
    if(exists) {
        fmt.Printf("%s exists", fred)  // "Suzuki exists"
    }   
}

mapからkeyを削除する

mapからkeyを削除するには、delete関数を使用します。

どのように行われるか以下のコード例を見てみましょう。

package main
 
import (
    "fmt"
)
 
func main() {
    var names = make(map[int]string)
     
    names[0] = "Suzuki"    // indexed insertion
    names[1] = "Yoshida"
    names[2] = "Tanaka"
     
    // delete Yoshida
    delete(names, 1) 
    fmt.Println(names)     // map[0:Suzuki 2:Tanaka]
}

mapエントリーの反復処理

rangeを使うと、mapを繰り返し処理し、keyとvalueの両方を取得することができます。

package main
 
import (
    "fmt"
)
 
func main() {
    var names = make(map[int]string)
     
    names[0] = "Suzuki"
    names[1] = "Yoshida"
    names[2] = "Tanaka"
    names[3] = "Sato"
    names[4] = "Kato"
     
    for _, name := range names {
        fmt.Println(name)
    }
}

上記のコードを実行すると以下のように出力されます。

Suzuki
Yoshida
Tanaka
Sato
Kato
タイトルとURLをコピーしました