2011-12-30 23 views

Respuesta

17

Una verdadera matriz multidimensional debe estar indexada con múltiples índices. Una matriz de matrices se puede indexar con un solo índice, que devolverá otra matriz. Una verdadera matriz multidimensional almacena todos sus datos contiguamente. Una matriz de matrices almacena todas sus matrices constituyentes arbitrariamente dispersas. Esto puede mejorar el rendimiento de iteración debido a los efectos de caché para matrices verdaderas.

+0

+1 Detallado y claro. – alex

+0

Si existiera una matriz que le permitiera usar un solo índice para recuperar una "fila", pero almacenara todos sus datos contiguamente, ¿no sería necesariamente algo verdaderamente multidimensional? En otras palabras, ¿se deben cumplir realmente estas dos limitaciones o solo las últimas? – kojiro

+3

Bueno, tenga en cuenta, por ejemplo, que en JavaScript no se exige que las filas de una matriz bidimensional tengan el mismo número de columnas. – Pointy

2

No hay nada en JavaScript como ...

var arr = new Array[5][3]; /* Some weird JS/C-like thing for demonstration */ 

... con longitudes forzadas. Como una matriz.

Sin embargo, puede construir un Array del cual todos sus miembros son Array s de una longitud fija. Si uno de los sub Array s tuviera una longitud diferente, sería un irregularArray.

3

(una explicación visual que complementa una excelente answer de @recursive)

En algunos lenguajes (C#) no son tanto. La diferencia está en la "forma" de tales matrices.

int[3, 4] // true two-dimensional array 

// it will "look" like this, rectangular shape 
[[0, 0, 0, 0] 
[0, 0, 0, 0] 
[0, 0, 0, 0]] 

Pero cuando define una matriz de matrices, puede ser fácilmente (especialmente en javascript) así. Se llama jagged array.

[[0, 0] 
[0, 0, 0, 0, 0, 0] 
[0, 0, 0]] 
+0

El artículo de MSDN fue claro. Gracias. – Sinan

1

Aunque la especificación JavaScript (3.0) no hace mención de matrices multidimensionales, que son de hecho posible. Las matrices multidimensionales se pueden representar mediante matrices de matrices. See.

Por ejemplo.

var items = [[1,2],[3,4],[5,6]]; 
alert(items[0][0]); // Would alert 1 

Una matriz dimensional en Javascript.

var a = [0, 1, 2, 3]; 
a[[2]] === a[2]; // this is true 

2 == [2] //true 
// Even complex 
2 == [[[2]]] //true 

// And even more 
var a = { "xyz" : 1 }; 
a[[[["xyz"]]]] === a["xyz"]; //true 
2

El autor parece suponer que un “verdadero” matriz multidimensional es uno donde todos los elementos:

  • son matrices;

  • Se almacenan por valor, no por referencia; y

  • Tienen la misma longitud.

Las matrices de JavaScript pueden contener otras matrices, pero no por valor, solo por referencia.Es decir, los elementos de cada fila pueden estar contiguos en la memoria, pero las filas mismas pueden no serlo. Además, no hay manera de indicar estáticamente que todas las matrices internas deben tener la misma longitud, porque JavaScript se tipea dinámicamente.

Pero una matriz de matrices es precisamente lo que debe usar para representar una matriz multidimensional en JavaScript, y los detalles de la representación interna probablemente no sean relevantes para usted cuando recién esté aprendiendo el idioma.

Cuestiones relacionadas