Что такое многомерный многомерный массив?

Я читал книгу о 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