Viniendo de un fondo perl, siempre he definido una matriz 2D usando int[][]
. Sé que puedes usar int[,]
, ¿cuáles son las diferencias?¿Cuáles son las diferencias entre usar int [] [] e int [,]?
Respuesta
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.
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.
Sacó las palabras de mi boca. – MyItchyChin
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.
dentados: cada 'fila' puede tener diferentes longitudes de 'columna'. Multidimensional: cada 'fila' tiene la misma longitud de 'columna'. – Will
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];
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.
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)
Here es un excelente artículo acerca de las matrices, que cubre este tema muy bien.
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.
se puede ver int [] [] para (int []) [] (int []) es un objeto
- 1. ¿Cuáles son las diferencias entre Int e Integer en Scala?
- 2. ¿Cuáles son las diferencias entre usar `rails server` y` rackup`?
- 3. ¿Cuáles son las diferencias entre $ {} y # {}?
- 4. ¿Cuál es la diferencia entre int [] [] e int [,]?
- 5. Diferencia entre int e INT recibida por Parseint en Java
- 6. Diferencia entre int * p e int * p declaración
- 7. ¿Cuáles son las diferencias entre JSP y Facelets?
- 8. ¿Cuáles son las diferencias entre osql, isql y sqlcmd?
- 9. ¿Cuáles son las diferencias entre JSP, PHP, HTML5 y javascript?
- 10. ¿Cuáles son las diferencias entre AssemblyVersion, AssemblyFileVersion y AssemblyInformationalVersion?
- 11. ¿Cuáles son las diferencias entre Boo vs Nemerle?
- 12. ¿Cuáles son las diferencias entre el objeto JSON y JavaScript?
- 13. ¿Cuáles son las diferencias entre touchmove y gesturechange?
- 14. ¿Cuáles son las diferencias entre INSERT y UPDATE en MySQL?
- 15. ¿Cuáles son las diferencias entre TFS, SVN y GIT?
- 16. ¿Cuáles son las diferencias entre OllyDbg y WinDbg?
- 17. ¿Diferencia entre long e int en C#?
- 18. ¿Cuáles son las diferencias de uso entre size_t y off_t?
- 19. Django treebeard cuáles son las diferencias entre AL, NS, MP
- 20. ¿Cuáles son las diferencias entre LinFu.DynamicProxy y Castle.DynamicProxy?
- 21. ¿Cuáles son las diferencias entre @dynamic y @synthesize?
- 22. ¿Cuáles son las diferencias entre XmlSerializer y BinaryFormatter?
- 23. ¿Cuáles son las diferencias reales entre Zend Framework y Django?
- 24. ¿Diferencia entre void main e int main?
- 25. ¿Cuáles son las diferencias entre estos algoritmos de cifrado?
- 26. ¿Cuáles son las diferencias entre PHP y Java?
- 27. ¿Cuáles son las diferencias entre "=" y "<-" en R?
- 28. ¿Cuáles son las diferencias entre Flash Professional y Flash Builder?
- 29. ¿Cuáles son las diferencias entre LLVM y bytecode java?
- 30. ¿Cuáles son las diferencias entre RedrawWindow y UpdateWindow en Win32?
Éstos son algunos pensamientos en términos de rendimiento: http://stackoverflow.com/ preguntas/168897/qué-mejor-en-respeto-a-rendimiento-tipo-o-tipo –