Что такое многомерный многомерный массив?
Я читал книгу о Javascript и видел эту строку;
JavaScript не поддерживает истинные многомерные массивы, но вы можете аппроксимируют их массивами массивов.
Какая разница?
Ответы
Ответ 1
Истинный многомерный массив должен быть проиндексирован с несколькими индексами. Массив массивов можно индексировать с помощью одного индекса, который будет возвращать другой массив. Истинный многомерный массив хранит все свои данные в соприкосновении. Массив массивов хранит все его составные массивы, произвольно разбросанные вокруг. Это может улучшить производительность итерации из-за эффектов кеша для истинных массивов.
Ответ 2
(визуальное объяснение, которое дополняет отличный ответ @recursive)
В некоторых языках (С#) есть и то, и другое. Разница заключается в "форме" таких массивов.
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]]
Но когда вы определяете массив массивов, он может легко (особенно в javascript) выглядеть так. Он назвал jagged array.
[[0, 0]
[0, 0, 0, 0, 0, 0]
[0, 0, 0]]
Ответ 3
В JavaScript ничего нет...
var arr = new Array[5][3]; /* Some weird JS/C-like thing for demonstration */
... с принудительной длиной. Как матрица.
Однако вы можете построить Array
, из которых его члены все Array
фиксированной длины. Если бы один из суб Array
имел разную длину, это было бы зубчатым Array
.
Ответ 4
Автор, похоже, предположил, что "истинный" многомерный массив - это тот, где все элементы:
Массивы JavaScript могут содержать другие массивы, но не по значению, только по ссылке. То есть элементы каждой строки могут быть смежными в памяти, но сами строки не могут. Кроме того, нет никакого способа статически указать, что все внутренние массивы должны иметь одинаковую длину, поскольку JavaScript динамически типизирован.
Но массив массивов - это именно то, что вы должны использовать для представления многомерного массива в JavaScript, а детали внутреннего представления, вероятно, не относятся к вам, когда вы просто изучаете язык.
Ответ 5
Хотя спецификация JavaScript (3.0) не упоминает многомерные массивы, они на самом деле возможны. Многомерные массивы могут быть представлены массивами массивов. См..
Например.
var items = [[1,2],[3,4],[5,6]];
alert(items[0][0]); // Would alert 1
Одномерный массив в 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