matrices – ¿Qué diferencia hay en C# entre un array de la forma int[,] y uno de la forma int[][]?


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

int ()() es una matriz dentada, un array donde cada elemento es, a su vez un int (). (Una matriz de matrices). Aunque cada elemento de la matriz de “nivel superior” se almacena de forma contigua, esos elementos son solo referencias a otras matrices, que podrían estar en cualquier lugar de la memoria.

Mientras que las matrices rectangulares(int (,)) siempre tienen el mismo número de columnas por fila, en una matriz irregular(int ()()) cada elemento podría tener una longitud diferente (o de hecho puede ser nulo).

Tienen sus propias ventajas y desventajas. Las matrices rectangulares son más compactas en términos de memoria. Los arreglos irregulares son más rápidos en CLR, pero no tienen una coherencia de caché tan buena.

El espacio extra que ocupan las “matrices de filas” en matrices dentadas puede ser significativo en algunos casos, si tienes un int (10000, 2) que solo ocupará 80000 bytes más la sobrecarga de un objeto de matriz, mientras que en una matriz serían los 80000 bytes para los datos y la sobrecarga de 10001 objetos de matriz.