Comment obtenir la largeur et la hauteur d'un tableau multidimensionnel?

180

J'ai un tableau défini:

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

Tout cela est bien beau, mais j'ai besoin de savoir quelle est la largeur de ce tableau dans les dimensions xet yindividuellement. À savoir, ary.Lengthpourrait renvoyer 12 - mais cela signifie-t-il que le tableau est 4 de haut et 3 de large, ou 6 de haut et 2 de large?

Comment puis-je récupérer ces informations?

Giffyguy
la source
1
en relation: stackoverflow.com/q/677909/60761
Henk Holterman

Réponses:

235

Vous utilisez Array.GetLength avec l'index de la dimension que vous souhaitez récupérer.

Reed Copsey
la source
104
.Rankpour le nombre de dimensions. Dans le cas où c'est 2, .GetLength(0)pour le nombre de lignes, .GetLength(1)pour le nombre de colonnes.
Colonel Panic
114

Utilisez GetLength () plutôt que Length.

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

Certains des autres articles ne savent pas quelle dimension est laquelle. Voici un test NUNIT qui montre comment les tableaux 2D fonctionnent en 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
la source
21
ary.GetLength(0) 
ary.GetLength(1)

pour tableau à 2 dimensions

Ali Tarhini
la source
3

Vous pouvez également envisager d'utiliser l'obtention des index des derniers éléments dans chaque dimension spécifiée en utilisant ceci comme suit;

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

Gardez à l'esprit que la valeur de l'index est basée sur 0.

rpcalisir
la source