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?



Réponses:


235

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


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);

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

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]);
}


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.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.