Bagaimana Anda mendapatkan lebar dan tinggi array multi dimensi?

180

Saya memiliki array yang ditentukan:

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

Ini semua baik dan bagus, tapi saya perlu tahu seberapa lebar array ini dalam dimensi xdan secara yindividual. Yaitu, ary.Lengthmungkin mengembalikan 12 - tetapi apakah itu berarti array adalah 4 tinggi dan 3 lebar, atau 6 tinggi dan 2 lebar?

Bagaimana saya dapat mengambil informasi ini?

Giffyguy
sumber
1
terkait: stackoverflow.com/q/677909/60761
Henk Holterman
1
Kemungkinan duplikat Bagaimana cara menemukan ukuran array 2D?
dbc

Jawaban:

235

Anda menggunakan Array. DapatkanLength dengan indeks dimensi yang ingin Anda ambil.

Reed Copsey
sumber
104
.Rankuntuk jumlah dimensi. Dalam hal ini adalah 2, .GetLength(0)untuk jumlah baris, .GetLength(1)untuk jumlah kolom.
Kolonel Panic
114

Gunakan GetLength (), bukan Panjang.

int rowsOrHeight = ary.GetLength(0);
int colsOrWidth = ary.GetLength(1);
David Yaw
sumber
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
Satish Wadkar
sumber
24

Beberapa posting lain bingung tentang dimensi mana. Berikut ini adalah tes NUNIT yang menunjukkan cara kerja array 2D di C #

[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]);
}
Peter Neorr
sumber
21
ary.GetLength(0) 
ary.GetLength(1)

untuk array 2 dimensi

Ali Tarhini
sumber
3

Anda juga dapat mempertimbangkan untuk menggunakan indeks elemen terakhir di setiap dimensi yang ditentukan menggunakan ini sebagai berikut;

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

Perlu diingat bahwa ini mendapatkan nilai indeks sebagai berbasis 0.

rpcalisir
sumber