0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Go言語(Golang)のスライス、マップ まとめ

Posted at

スライスの概要

スライスは、Go言語における動的な配列を扱うデータ構造です。スライスは固定長の配列と異なり、要素の追加や削除が可能で、サイズを動的に変更できます。スライスは配列への参照として実装されているため、配列の一部を取り扱うこともできます。

スライスの宣言と初期化

スライスの宣言と初期化の方法は以下の通りです。

package main

import "fmt"

func main() {
    // 空のスライスを宣言
    var s1 []int
    fmt.Println(s1) // []

    // リテラルでスライスを初期化
    s2 := []int{1, 2, 3}
    fmt.Println(s2) // [1, 2, 3]

    // make関数でスライスを作成
    s3 := make([]int, 5) // 長さ5のスライスを作成
    fmt.Println(s3) // [0 0 0 0 0]
}

スライスの操作

スライスに対する基本的な操作を以下に示します。

package main

import "fmt"

func main() {
    s := []int{1, 2, 3, 4, 5}

    // 要素のアクセス
    fmt.Println(s[0]) // 1

    // 要素の変更
    s[1] = 10
    fmt.Println(s) // [1 10 3 4 5]

    // スライスの一部を取得
    sub := s[1:4]
    fmt.Println(sub) // [10 3 4]

    // スライスの追加
    s = append(s, 6, 7)
    fmt.Println(s) // [1 10 3 4 5 6 7]
}

スライスの内部構造

スライスは以下の3つのフィールドで構成されています。

  1. ポインタ: 配列の先頭要素へのポインタ。
  2. 長さ: スライスの要素数。
  3. 容量: スライスが参照する配列の最大要素数。

この構造により、スライスは効率的にメモリを管理し、動的なサイズ変更が可能です。


マップ (Maps)

マップの概要

マップは、キーと値のペアを管理するデータ構造で、他の言語でいうところのハッシュテーブルや辞書に相当します。キーを使って迅速に値を検索、追加、削除することができます。

マップの宣言と初期化

マップの宣言と初期化の方法は以下の通りです。

package main

import "fmt"

func main() {
    // 空のマップを宣言
    var m1 map[string]int
    fmt.Println(m1) // map[]

    // make関数でマップを作成
    m2 := make(map[string]int)
    fmt.Println(m2) // map[]

    // リテラルでマップを初期化
    m3 := map[string]int{
        "apple":  5,
        "banana": 10,
    }
    fmt.Println(m3) // map[apple:5 banana:10]
}

マップの操作

マップに対する基本的な操作を以下に示します。

package main

import "fmt"

func main() {
    m := map[string]int{
        "apple":  5,
        "banana": 10,
    }

    // 値の取得
    fmt.Println(m["apple"]) // 5

    // 値の追加・更新
    m["orange"] = 8
    fmt.Println(m) // map[apple:5 banana:10 orange:8]

    // 値の削除
    delete(m, "banana")
    fmt.Println(m) // map[apple:5 orange:8]

    // 値の存在確認
    value, exists := m["apple"]
    if exists {
        fmt.Println("apple exists:", value) // apple exists: 5
    } else {
        fmt.Println("apple does not exist")
    }
}

マップの内部構造

マップはハッシュテーブルを基に実装されており、キーを迅速に見つけるためにハッシュ関数を使用します。これにより、キーの検索、追加、削除が平均的にO(1)の時間で行われます。

まとめ

  • スライス: 動的な配列で、サイズの変更や部分配列の取得が可能。
  • マップ: キーと値のペアを効率的に扱うデータ構造で、迅速な検索、追加、削除が可能。
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?