Go 言語の配列

Go 言語の配列

通常、複数の同じデータ型の変数がひと続きのメモリ領域に割り当てられ、そこにインデックスアクセスできるようになっているデータ構造を配列といいます。

Go では次の形式で配列を宣言します。

var 変数名 [配列のサイズ]型

配列の要素には [] を使ってインデックスアクセスできます。

Go の配列

配列の最初の要素のインデックスは 0 です。このため、配列のサイズ (配列に格納できる要素数) が 3 でも、最大のインデックスは 2 であることに注意しましょう。

Go では要素のデータ型 + 割り当てサイズを含めて一つの型として認識します。

Go には配列によく似たデータ構造として「スライス」があります。スライスではサイズは動的に割り当てられます。

Go の配列の宣言と初期化

次の例では string 型の要素を 3 個持つ配列 fruits を宣言して、 先頭の要素 fruits[0] から順に、 "Apple""Banana""Orange" という文字列をセットしています。

var fruits [3]string
fruits[0] = "Apple"
fruits[1] = "Banana"
fruits[2] = "Orange"
fmt.Println(fruits) // [Apple Banana Orange]

配列の宣言と同時に値を初期化するには、次のようにします。

var fruits [3]string = [3]string{"Apple", "Banana", "Orange"}
fmt.Println(fruits) // [Apple Banana Orange]

配列の初期化を行う時、 = の右側の型から配列の型がわかる場合には、 = の左側で型を書くことを省略できます。

var fruits = [3]string{"Apple", "Banana", "Orange"}

var を省略する場合は、通常の変数と同じく := を用いて次のように書きます。

fruits := [3]string{"Apple", "Banana", "Orange"}

配列を初期化するサイズを自動的に設定するには [要素数] の代わりに [...] と書きます。

fruits := [...]string{"Apple", "Banana", "Orange"}

要素数の記述を省略するとき [...] とせずに [] としても動作します。この場合、配列ではなくスライスとなります。

Go の配列の値をインデックスを指定して初期化するには、 インデックス:値 という形式で初期化子に指定します。

次の例ではインデックス 137 に値が設定されています。

a := [...]int{1: 111, 3: 333, 7: 777}
fmt.Println(a) // [0 111 0 333 0 0 0 777]

値が指定されていない配列の要素は、その型の既定値が設定されます。

Go の配列の比較

Go では配列を == 演算子で比較すると、全ての要素の値を比較し、全て同じ場合に true とします。

a := [...]int{1, 2, 3}
b := [...]int{1, 2, 3}
fmt.Println(a == b) // true
b[1] = 5
fmt.Println(a == b) // false

!= 演算子で比較した場合は、 == の結果の否定であり、 比較した二つの配列の要素が全て同じ場合に false で、それ以外は true です。

<> 演算子は配列の比較に使用できません。

Go の配列と for ループ

Go では配列を for ループで利用する際、 range キーワードを用いてインデックスと、要素の値を取り出すことができます。

次の例では要素がrune 型の配列 a{'A', 'B', 'C'] という値で初期化して作成して、 for-range を用いて配列のインデックスと、それに対応する値を取り出して表示しています

package main

import "fmt"

func main() {
	a := [...]rune{'A', 'B', 'C'}
	fmt.Printf("Type: %T\n", a)
	for i, ch := range a {
		fmt.Printf(" a[%d] = %c\n", i, ch)
	}
}
main.go
go run main.go
Type: [3]int
 a[0] = A
 a[1] = B
 a[2] = C

ここまでお読みいただき、誠にありがとうございます。SNS 等でこの記事をシェアしていただけますと、大変励みになります。どうぞよろしくお願いします。

© 2024 Go 言語入門