こんにちは、C#のプログラミングのみつるです。
今回はC#の、多次元配列について詳しく説明します。
一次元配列は前回説明済みなので、そちらを参照してください。
多次元配列
多次元配列とは、配列の要素が配列であるようなデータ構造のことです。
例えば、二次元配列は行と列で構成される表のようなもので、三次元配列は行と列と奥行きで構成される立体的なものです。
C#では、多次元配列を宣言するには、型名の後に[,]や[,,]などのようにカンマを入れた角括弧を付けます。
例えば、int型の二次元配列を宣言するには、int[,] array;と書きます。
三次元配列なら、int[,,] array;と書きます。
多次元配列を初期化するには、要素を{}で囲んで指定します。
要素はカンマで区切りますが、各次元ごとに{}で囲む必要があります。
例えば、int型の二次元配列を初期化するには、以下のように書きます。
二次元配列
using System; namespace ConsoleApp1 { internal class Program { static void Main(string[] args) { int[,] array = { {1, 2, 3}, {4, 5, 6}, {7, 8, 9} }; } } }
この場合、array[0,0]は1、array[1,2]は6、array[2,1]は8という値になります。
二次元配列では、最初のインデックスが行番号、二番目のインデックスが列番号を表します。
三次元配列
三次元配列を初期化する場合は、以下のように書きます。
using System; namespace ConsoleApp1 { internal class Program { static void Main(string[] args) { int[,,] array = { { {1, 2, 3}, {4, 5, 6} }, { {7, 8, 9}, {10, 11, 12} } }; } } }
この場合、array[0,0,0]は1、array[1,1,2]は12、array[0,1,1]は5という値になります。
三次元配列では、最初のインデックスが奥行き番号、二番目のインデックスが行番号、三番目のインデックスが列番号を表します。
多次元配列の長さや要素数を取得
多次元配列の長さや要素数を取得するには、LengthプロパティやGetLengthメソッドを使います。
Lengthプロパティは全ての要素数を返しますが、GetLengthメソッドは指定した次元の要素数を返します。例えば、
using System; namespace ConsoleApp1 { internal class Program { static void Main(string[] args) { Console.WriteLine(array.Length); Console.WriteLine(array.GetLength(0)); Console.WriteLine(array.GetLength(1)); Console.WriteLine(array.GetLength(2)); } } }
というように使います。
多次元配列を操作するには、for文やforeach文などのループ文を使います。
for文では各次元ごとにループ変数を用意し、インデックスとして使います。例えば、
using System; namespace ConsoleApp1 { internal class Program { static void Main(string[] args) { for (int i = 0; i < array.GetLength(0); i++) { for (int j = 0; j < array.GetLength(1); j++) { for (int k = 0; k < array.GetLength(2); k++) { Console.Write(array[i,j,k] + " "); } Console.WriteLine(); } } } } }
というように書くと、
というように出力されます。
foreach文では全ての要素を順番に取り出すことができます。例えば、
using System; namespace ConsoleApp1 { internal class Program { static void Main(string[] args) { foreach (int x in array) { Console.Write(x + " "); } } } }
というように書くと、
というように出力されます。
以上が、C#の多次元配列についての説明です。
多次元配列は、表や立体などの複雑なデータ構造を扱うときに便利です。
ぜひ使ってみてください。