2010-08-12 26 views

Respuesta

40

int[,] es una matriz rectangular - un objeto que tiene dos dimensiones. Cada elemento de la matriz es un número entero; todos los elementos se almacenan contiguamente en la memoria.

int[][] es un dentado array - una matriz en donde cada elemento es a su vez un int[]. (Así que es una matriz de matrices.) Aunque cada elemento de la matriz de "nivel superior" se almacena contiguamente, esos elementos son solo referencias a otras matrices, que podrían estar en cualquier lugar de la memoria.

Mientras que las matrices rectangulares siempre tienen el mismo número de columnas por fila, en una matriz dentada cada elemento puede tener una longitud diferente (o incluso puede ser nula).

Cada uno tiene sus propias ventajas y desventajas; las matrices rectangulares son más compactas en términos de memoria, pero no permiten una población dispersa. Las matrices dentadas son más rápidas en el CLR, pero no tienen la misma coherencia de caché. El espacio extra ocupado por los "arreglos de fila" en arreglos irregulares puede ser significativo en algunos casos, si tiene un int[10000, 2] que solo ocupará 80000 bytes más la sobrecarga de un objeto de matriz, mientras que en una matriz dentada sería el 80000 bytes para los datos y la sobrecarga de objetos de matriz 10001.

MSDN tiene más información en su arrays tutorial.

+3

Esta es la mejor respuesta (independientemente de la pregunta) que haya leído alguna vez. –

11

El primero es par (cada fila contiene el mismo número de elementos) El segundo es dentado (cada fila puede contener un número diferente de elementos)

Para decirlo de otra manera, la primera es un multi -dimensional array - una matriz rectangular. La segunda es una matriz de matrices (y por tanto, cada matriz individual puede ser de una longitud diferente.)

4

int[x,y] es una matriz bidimensional con dimensiones fijas (por ejemplo, int[4,5]).
int[][] es una matriz dentada, lo que significa que es una matriz de matrices, cada una de las cuales puede tener un número diferente de elementos.

2

Para crear una matriz, int[,] es más fácil. La matriz dentada int[][] requiere más trabajo (necesita un bucle adicional para setup the complete matrix).

Pero es posible que desee considerar int[][] porque es faster.

0

Como todos los demás han mencionado, int[,] es una matriz multidimensional/rectangular, mientras que int[][] es una matriz de matrices, o una matriz "dentada".

En cuanto a cuándo usaría uno sobre el otro, int[][] puede ser difícil de configurar (cada fila debe crearse), pero parece ser siempre un poco más rápido. La ventaja de int[,] es que es más simple y se aplica la regularidad, lo que lo hace ideal para cuando lo necesite. (Es más difícil reemplazar accidentalmente una fila completa en una matriz 2D que con una matriz de matrices.)

Cuestiones relacionadas