¿Cómo se obtiene el ancho y la altura de una matriz multidimensional?

180

Tengo una matriz definida:

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

Todo esto está muy bien, pero necesito saber qué tan ancho es este conjunto en xy las ydimensiones individualmente. Es decir, ary.Lengthpodría devolver 12, pero ¿eso significa que la matriz tiene 4 de alto y 3 de ancho, o 6 de alto y 2 de ancho?

¿Cómo puedo recuperar esta información?

Giffyguy
fuente
1
relacionado: stackoverflow.com/q/677909/60761
Henk Holterman el

Respuestas:

235

Utiliza Array.GetLength con el índice de la dimensión que desea recuperar.

Reed Copsey
fuente
104
.Rankpor el número de dimensiones. En el caso de que sea 2, .GetLength(0)para el número de filas, .GetLength(1)para el número de columnas.
Coronel Panic
114

Use GetLength (), en lugar de Longitud.

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

Algunas de las otras publicaciones están confundidas acerca de qué dimensión es cuál. Aquí hay una prueba de NUNIT que muestra cómo funcionan las matrices 2D 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
fuente
21
ary.GetLength(0) 
ary.GetLength(1)

para matriz bidimensional

Ali Tarhini
fuente
3

También podría considerar usar los índices de los últimos elementos en cada dimensión especificada usando esto de la siguiente manera;

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

Tenga en cuenta que esto obtiene el valor del índice como basado en 0.

rpcalisir
fuente