Показать сообщение отдельно
  #28 (permalink)  
Старый 13.02.2014, 21:15
Аватар для Дзен-трансгуманист
√₋̅₁̅
Отправить личное сообщение для Дзен-трансгуманист Посмотреть профиль Найти все сообщения от Дзен-трансгуманист
 
Регистрация: 18.06.2012
Сообщений: 385

Сообщение от dima***
Разница в чём,опять не понятно?
Сообщение от kobezzza
Многомерный массив - это удобная абстракция, т.е. внутри реализации это всё тот же одномерный один массив, а массив массивов - это такой массив, элементами которого являются другие массивы.

Массивы массивов более гибкие, т.к. не накладывают ограничений на длину вложенных массивов

dima***,
Поскольку ты новичок, я думаю, тут не помешает разжевать и дополнить ответ kobezzza для ясности.

Понятие массива в программировании не всегда задано однозначно. В общем случае так называется объект, объединяющий некоторое множество других, доступных каждый напрямую по своему индексу. При этом организация внутренней механики, ограничения на тип хранимых внутри объектов и дополнительный функционал опускаются для упрощения - обычно все тонкости понятны из контекста.

В JS массивом изначально считается встроенный тип объектов, который допускает произвольную манипуляцию набором данных: они могут быть любого типа, их можно добавлять и удалять как угодно, а сам размер ограничен только самим движком JS.

В других языках, приложениях и всевозможных абстрактных и предметно-ориентированных моделях точное определение может быть другим. Например, в C/C++ массив это ничто иное, как цельный блок памяти, который интерпретируется как неразрывная последовательность элементов одного и того же типа и размера. Там мы не можем просто так взять и вырезать какой-то элемент, чтобы дырка между соседями свернулась сама собой: для этого пришлось быть передвинуть весь хвост справа на позицию назад, а это могут быть мега- и гигабайты памяти! Такие простые структуры непосредственно используются, как правило, только для данных фиксированной длины с жесткой привязкой к индексу.

Так вот, когда говорят о многомерных массивах, часто подразумеваются именно такие. Дело в том, что одномерный массив как линейный блок памяти легко превращается в многомерный, если применить к функции индекса простые арифметические преобразования. Это имеет смысл, так как доступ к данным происходит максимально быстро, а поддержание объекта в действии не накладывает никаких неявных издержек в виде сложных вычислений или дополнительной памяти.

Например, нужен массив [5][6][7]. Объем его одномерного аналога будет 5*6*7 = 210 элементов. Можно однозначно сопоставить вариации трех координат одному диапазону чисел. Если наша иерархия индексов [x][y][z], то преобразование к одномерному виду будет i = (x*6 + y)*7 + z.

И хотя в JS обычные массивы позволяют работать с ними КАК с многомерными, внутренняя их топология все же остается свободной для изменений. В связи с этим иногда возникает путаница в толковании.

Тем не менее, уже несколько лет как в оборот введены Typed Arrays, являющиеся примером простого, но жесткого варианта. Однако типы их содержимого на данный момент ограничены только числовыми.
__________________

Гейзенберг, возможно, читал этот тред.

Последний раз редактировалось Дзен-трансгуманист, 13.02.2014 в 22:02.
Ответить с цитированием