多次元配列の幅と高さをどのように取得しますか?


180

配列を定義しました:

int [,] ary;
// ...
int nArea = ary.Length; // x*y or total area

これはすべて順調で良いですが、この配列がxとのy次元でどれだけ広いかを個別に知る必要があります。つまり、ary.Length12を返す可能性がありますが、それは配列が高さ4と幅3、または高さ6と幅2であることを意味しますか?

この情報を取得するにはどうすればよいですか?



回答:



114

長さではなく、GetLength()を使用してください。

int rowsOrHeight = ary.GetLength(0);
int colsOrWidth = ary.GetLength(1);

41
// Two-dimensional GetLength example.
int[,] two = new int[5, 10];
Console.WriteLine(two.GetLength(0)); // Writes 5
Console.WriteLine(two.GetLength(1)); // Writes 10

24

他の投稿のいくつかは、どの次元がどれであるかについて混乱しています。これは、2D配列がC#でどのように機能するかを示すNUNITテストです。

[Test]
public void ArraysAreRowMajor()
{
    var myArray = new int[2,3]
        {
            {1, 2, 3},
            {4, 5, 6}
        };

    int rows = myArray.GetLength(0);
    int columns = myArray.GetLength(1);
    Assert.AreEqual(2,rows);
    Assert.AreEqual(3,columns);
    Assert.AreEqual(1,myArray[0,0]);
    Assert.AreEqual(2,myArray[0,1]);
    Assert.AreEqual(3,myArray[0,2]);
    Assert.AreEqual(4,myArray[1,0]);
    Assert.AreEqual(5,myArray[1,1]);
    Assert.AreEqual(6,myArray[1,2]);
}


3

次のようにこれを使用して、指定された各次元の最後の要素のインデックスを取得することを検討することもできます。

int x = ary.GetUpperBound(0);
int y = ary.GetUpperBound(1);

これはインデックスの値を0ベースとして取得することに注意してください。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.