Come si ottiene la larghezza e l'altezza di un array multidimensionale?


180

Ho un array definito:

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

Va tutto bene, ma devo sapere quanto è ampio questo array nelle dimensioni xe yindividualmente. Vale a dire, ary.Lengthpotrebbe restituire 12 - ma ciò significa che l'array è 4 alto e 3 largo, oppure 6 alto e 2 largo?

Come posso recuperare queste informazioni?



Risposte:


235

Si utilizza Array.GetLength con l'indice della dimensione che si desidera recuperare.


104
.Rankper il numero di dimensioni. Nel caso questo sia 2, .GetLength(0)per il numero di righe, .GetLength(1)per il numero di colonne.
Colonnello Panic,

114

Usa GetLength (), piuttosto che Lunghezza.

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

Alcuni degli altri post sono confusi su quale dimensione sia quale. Ecco un test NUNIT che mostra come funzionano gli array 2D in 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

Si potrebbe anche considerare l'utilizzo di ottenere gli indici degli ultimi elementi in ciascuna dimensione specificata usando questo come segue;

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

Tieni presente che questo ottiene il valore dell'indice come basato su 0.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.