2009-07-21 13 views

Respuesta

29

La diferencia aquí es que la primera muestra, int [] [] crea un jagged array, mientras que el segundo crea un rectangular array (de dimensión 2). En una matriz irregular, cada "columna" puede ser de un tamaño diferente. En una verdadera matriz multidimensional, cada "columna" (en una dimensión) tiene el mismo tamaño. Para obtener información más completa, consulte el Array section del C# Programming Guide.

9

int [] [] es una matriz de matrices o matriz "dentada": puede usar esto cuando desee diferentes tamaños en la segunda dimensión. Por ejemplo, la primera matriz secundaria puede tener 5 elementos y la segunda puede tener 42.

int [,] es una matriz bidimensional: la segunda dimensión es la misma en toda la matriz. Con int [7, 42] la segunda dimensión es 42 para las 7 líneas.

+1

Sacó las palabras de mi boca. – MyItchyChin

12

Here's a good comparison

Básicamente int [] [] es una matriz "escalonado", que se ve así:

[] -> [1, 2, 3] 
[] -> [1, 2] 
[] -> [1, 2, 3, 4] 

Mientras int [,] es una matriz multidimensional que siempre tiene la misma anchura y alto:

[1, 2, 3, 4 
5, 6, 7, 8 
9, 1, 2, 3] 

Cada uno tiene su uso dependiendo de lo que estás tratando de lograr.

+1

dentados: cada 'fila' puede tener diferentes longitudes de 'columna'. Multidimensional: cada 'fila' tiene la misma longitud de 'columna'. – Will

4

int [] [] es una matriz dentada, donde int [,] es una matriz bidimensional.

claramente

var a = int[][] 

permite usted tiene una serie como esta:

a[0] = new int[2]; 
a[1] = new int[5]; 

donde como con int [,] debe siempre tener la segunda parte de la matriz de la misma:

var a = int[2,2]; 

a[0,0] 
a[0,1] 
a[1,0] 
a[1,1] 

no puede tener un [2,2];

3

int [] [] se llama matriz de matrices, puede tener una longitud arbitraria para cada fila.

int [,] se llama matriz rectangular, donde todas las filas tienen la misma longitud. Puede ser simulado por el primero.

0

Una cosa a tener en cuenta acerca de una matriz dentada es que está asignando trozos de memoria no contiguos. Esto es algo bueno si tiene una gran variedad de objetos grandes. He visto SomeThing [n, n] crear problemas de StackOverflow, pero SomeThing [n] [n] está bien.

Además, si un objeto obtiene> 85,000 bytes va al LOH (Gran montón de objetos). .NET Collections and the Large Object Heap (LOH)

0

Here es un excelente artículo acerca de las matrices, que cubre este tema muy bien.

1

La mejor manera de entender la diferencia es mirar dos formas de crear una matriz de nxn:

const int n = 8, m = 8; 

int[,] matrix1 = new int[n,m]; 

int[][] matrix2 = new int[n][]; 
for (int i = 0; i < matrix2.Length; i++) { matrix2[i] = new int[m]; } 

matrix1[1,1] = matrix2[2][2]; 

Como se puede ver que el segundo es un poco más complicado porque se necesita el ciclo for a crearlo completamente A menudo se denomina una matriz dentada porque las matrices de segundo orden no necesitan tener la misma longitud.

0

se puede ver int [] [] para (int []) [] (int []) es un objeto

Cuestiones relacionadas