Go言語で2次元配列を扱う方法

Go言語で2次元配列を扱う方法

Go言語で2次元配列を扱う方法について説明します。
Go言語では、多次元配列を簡単に扱うことができます。
2次元配列は、配列の配列として定義され、行と列の2つの次元を持つ配列です。
以下では、2次元配列の宣言方法、初期化、要素のアクセス、ループ処理、2次元スライスについて説明します。

2次元配列の宣言と初期化

Go言語で2次元配列を宣言するには、まず配列のデータ型とサイズを指定する必要があります。
例えば、3行4列の整数型の2次元配列を宣言するには、次のようにします。

var matrix [3][4]int

上記のコードでは、matrixは3行4列の整数型の2次元配列です。
全ての要素はゼロ値で初期化されます。
整数型の場合、ゼロ値は0です。

特定の値で初期化したい場合は、次のように宣言時に値を設定することができます。

matrix := [3][4]int{
  {1, 2, 3, 4},
  {5, 6, 7, 8},
  {9, 10, 11, 12},
}

上記のコードでは、matrixは3行4列の整数型の2次元配列で、各行には異なる整数のセットが含まれています。

2次元配列の要素アクセス

2次元配列の要素にアクセスするには、配列のインデックスを使用します。
例えば、matrixの2行3列目の要素にアクセスするには次のようにします。

value := matrix[1][2]
fmt.Println(value) // 出力: 7

インデックスは0から始まるので、matrix[1][2]は2行目の3列目の要素を指します。

2次元配列のループ処理

2次元配列の全ての要素を操作するためには、ネストされたループを使用します。
外側のループで行を処理し、内側のループで列を処理します。
次の例は、2次元配列の全ての要素を出力する方法を示しています。

for i := 0; i < len(matrix); i++ {
  for j := 0; j < len(matrix[i]); j++ {
    fmt.Printf("%d ", matrix[i][j])
  }
  fmt.Println() // 改行
}

このコードは、matrixの各要素を順に出力し、行ごとに改行を挿入します。

2次元スライスの使用

Go言語では、配列の代わりにスライスを使用することが一般的です。
スライスはサイズが柔軟で、動的に要素を追加できます。
2次元スライスを使用することで、同様に2次元配列のようなデータ構造を持つことができます。

2次元スライスを作成するには、まずスライスのスライスを定義します。
例えば、3行の整数型の2次元スライスを定義するには次のようにします。

var slice [][]int

次に、各行のスライスを初期化し、必要に応じて要素を追加します。

slice = make([][]int, 3) // 3行のスライスを作成

for i := range slice {
  slice[i] = make([]int, 4) // 各行に4列のスライスを作成
}

slice[0][0] = 1
slice[1][2] = 7
slice[2][3] = 12

この例では、make関数を使用して、3行4列の2次元スライスを動的に作成しています。
2次元スライスの要素にアクセスする方法は、2次元配列と同じです。

2次元スライスのループ処理

2次元スライスの要素を処理するには、2次元配列と同様にネストされたループを使用します。

for i := range slice {
  for j := range slice[i] {
    fmt.Printf("%d ", slice[i][j])
  }
  fmt.Println()
}

まとめ

Go言語で2次元配列を扱う方法はシンプルです。
固定サイズの配列を使用するか、動的なサイズのスライスを使用するかによって、使い方が少し異なりますが、どちらも多次元データを効果的に管理できます。
2次元配列やスライスの初期化、要素のアクセス、ループ処理の方法を理解することで、Go言語でのデータ処理がより柔軟に行えます。
スライスは特に、サイズの変更や柔軟なデータ操作が求められる場合に非常に便利です。