2010-11-23 16 views
106

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

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

Todo esto está muy bien, pero necesito saber el ancho de esta matriz se encuentra en las x y y dimensiones individual. A saber, ary.Length podría devolver 12, pero ¿eso significa que la matriz es 4 de alto y 3 de ancho, o 6 de alto y 2 de ancho?

¿Cómo puedo recuperar esta información?

+0

relacionados: http://stackoverflow.com/q/677909/60761 –

+0

duplicado posible de [? ¿Cómo puedo encontrar el tamaño de una matriz 2D] (http://stackoverflow.com/questions/4106369/how-do-i-find-the-size-of-a-2d-array) – dbc

Respuesta

146

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

+67

'.Rank' para el número de dimensiones. En el caso de que esto sea 2, '.GetLength (0)' para el número de filas, '.GetLength (1)' para el número de columnas. –

20
ary.GetLength(0) 
ary.GetLength(1) 

para 2 matriz dimensional

65

Uso GetLength(), en lugar de cuerpo entero.

int rowsOrHeight = ary.GetLength(0); 
int colsOrWidth = ary.GetLength(1); 
+8

Creo que tiene altura y ancho hacia atrás en esta respuesta. – AdmiralAdama

+1

Me pregunto por qué se votó esta respuesta a pesar de que el orden de ancho/alto no es correcto (dado que las personas generalmente se refieren al recuento de columnas por "ancho" y al recuento de filas por "alto"). Espero que todas esas personas lo notaron :) – AlexP11223

+5

Si el 'ancho' es la primera o la segunda dimensión es, en mi opinión, una opción de nivel de aplicación. Todo depende de cómo se define la matriz y qué datos está poniendo en ella. Al igual que en el almacenamiento de matrices principal o principal, las dos opciones son válidas y cada una tiene su uso en diferentes contextos. –

26
// Two-dimensional GetLength example. 
int[,] two = new int[5, 10]; 
Console.WriteLine(two.GetLength(0)); // Writes 5 
Console.WriteLine(two.GetLength(1)); // Writes 10 
13

Algunos de los otros mensajes son la confusión sobre qué dimensión es cuál. Aquí está una prueba 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]); 
} 
Cuestiones relacionadas