多次元配列も1次元配列と同様for文・foreach文で列挙することができます。 ただ、foreach文で多次元配列を列挙する場合、行や列ごとといった部分配列が列挙されるのではなく、次元が平坦化された1次元の数列として列挙されます。 この際、多段配列内の各要素は、より高い次元にあるインデックスの小さい要素から順に列挙されます。 そのため、多次元配列から行や列ごとに要素を抽出したい場合は、foreach文ではなくfor文でインデックスを指定して列挙する必要があります。
for・foreachで4次元配列を列挙する
using System;
class Sample {
static void Main()
{
// 2×2×2×2個の要素を持つ4次元配列
int[,,,] tesseract = {
{ { {0, 1}, { 2, 3} }, { { 4, 5}, { 6, 7} } },
{ { {8, 9}, {10, 11} }, { {12, 13}, {14, 15} } },
};
// for文を使って列挙
for (var d1 = 0; d1 < tesseract.GetLength(0); d1++) {
Console.Write("[ ");
for (var d2 = 0; d2 < tesseract.GetLength(1); d2++) {
Console.Write("{ ");
for (var d3 = 0; d3 < tesseract.GetLength(2); d3++) {
Console.Write("( ");
for (var d4 = 0; d4 < tesseract.GetLength(3); d4++) {
Console.Write("{0}, ", tesseract[d1, d2, d3, d4]);
}
Console.Write("), ");
}
Console.Write("}, ");
}
Console.WriteLine("], ");
}
Console.WriteLine();
// foreach文を使って列挙
foreach (var elem in tesseract) {
Console.Write("{0}, ", elem);
}
Console.WriteLine();
}
}
実行結果
[ { ( 0, 1, ), ( 2, 3, ), }, { ( 4, 5, ), ( 6, 7, ), }, ], [ { ( 8, 9, ), ( 10, 11, ), }, { ( 12, 13, ), ( 14, 15, ), }, ], 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,