¿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?



Respuestas:


235

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


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

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

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


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.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.