1次元配列でLengthプロパティを参照すると要素数が取得できます。 一方、多次元配列でLengthプロパティを参照した場合、返される値は多次元配列の全要素数となります。 つまり、3×4個の要素を持つ2次元配列の場合、Lengthプロパティは12を返します。
次元毎の長さを取得したい場合は、GetLengthメソッドを呼び出します。 取得したい次元の番号を指定してGetLengthメソッドを呼び出すことで、多次元配列におけるその次元の長さが返されます。
GetLengthメソッドでは、最初の次元は0、その次の次元は1として扱われるため、例えば3次元配列の場合は0~2の値を次元の番号として指定します。 1次元配列に対してもGetLengthメソッドを呼び出すことはできます。 この場合、返される結果はLengthプロパティと同じです。
また、Rankプロパティを参照することで、多次元配列の次元数(次元の高さ)を取得できます。 1次元配列では1、2次元配列では2が返されます。
多次元配列の全要素数・次元数・次元ごとの長さを取得する
using System;
class Sample {
static void Main()
{
// 5個の要素を持つ1次元配列
int[] arr = new int[5];
Console.WriteLine("arr.Length = {0}", arr.Length);
Console.WriteLine("arr.Rank = {0}", arr.Rank);
Console.WriteLine("arr = {0}", arr.GetLength(0));
Console.WriteLine();
// 3×4個の要素を持つ2次元配列
int[,] matrix = new int[3, 4];
Console.WriteLine("matrix.Length = {0}", matrix.Length);
Console.WriteLine("matrix.Rank = {0}", matrix.Rank);
Console.WriteLine("matrix = {0}×{1}", matrix.GetLength(0), matrix.GetLength(1));
Console.WriteLine();
// 4×2×3個の要素を持つ3次元配列
int[,,] cube = new int[4, 2, 3];
Console.WriteLine("cube.Length = {0}", cube.Length);
Console.WriteLine("cube.Rank = {0}", cube.Rank);
Console.WriteLine("cube = {0}×{1}×{2}", cube.GetLength(0), cube.GetLength(1), cube.GetLength(2));
Console.WriteLine();
// 2×2×2×2個の要素を持つ4次元配列
int[,,,] tesseract = new int[2, 2, 2, 2];
Console.WriteLine("tesseract.Length = {0}", tesseract.Length);
Console.WriteLine("tesseract.Rank = {0}", tesseract.Rank);
Console.WriteLine("tesseract = {0}×{1}×{2}×{3}", tesseract.GetLength(0), tesseract.GetLength(1), tesseract.GetLength(2), tesseract.GetLength(3));
}
}
実行結果
arr.Length = 5 arr.Rank = 1 arr = 5 matrix.Length = 12 matrix.Rank = 2 matrix = 3×4 cube.Length = 24 cube.Rank = 3 cube = 4×2×3 tesseract.Length = 16 tesseract.Rank = 4 tesseract = 2×2×2×2