Возможный дубликат:
Массивы, что точка?
Я пытался задать этот вопрос раньше в В чем разница между массивом и списком?, но мой вопрос был закрыт, прежде чем прийти к окончательному ответу (подробнее об этом).
Я пытаюсь понять, что на самом деле подразумевается под словом "массив" в информатике. Я пытаюсь достичь ответа, не имея обсуждения в соответствии с духом этого веб-сайта. То, что я прошу, является агностиком языка, но вы можете опираться на свои знания о том, какие массивы выполняются на разных языках, которые вы использовали.
Способы размышления об этом вопросе:
- Представьте, что вы разрабатываете новый язык программирования, и вы решили реализовать в нем массивы; что это значит? Какими будут свойства и возможности этих вещей. Если это зависит от типа языка, как это?
- Что делает массив массивом?
- Когда массив не является массивом? Когда это, например, список, вектор, таблица, карта или коллекция?
Возможно, нет четкого определения того, что такое массив, если это так, то есть ли какие-либо стандартные или почти стандартные допущения или что такое массив? Есть ли какие-то общие области? Может быть, есть несколько определений, если это так, я ищу самую точную в каждом из них.
Примеры языка:
(Исправьте меня, если я ошибаюсь ни на одном из них).
- C-массивы представляют собой непрерывные блоки памяти одного типа, которые могут быть пройдены с использованием арифметики указателя или доступны в определенной точке смещения. Они имеют фиксированный размер.
- Массивы в JavaScript, Ruby и PHP имеют переменный размер и могут хранить объект/скаляр любого типа, который они также могут вырастить, или удалить элементы из них.
- Массивы PHP бывают двух типов: числовые и ассоциативные. Ассоциативные массивы содержат элементы, которые хранятся и извлекаются с помощью строковых ключей. Числовые массивы имеют элементы, которые хранятся и извлекаются целыми числами. Интересно, если у вас есть:
$eg = array('a', 'b', 'c')
и выunset($eg[1])
, вы все равно извлекаете'c'
с помощью$eg[2]
, только теперь$eg[1]
- undefined. (Вы можете вызватьarray_values()
для повторной индексации массива). Вы также можете смешивать строки и целые ключи.
На этом этапе подозрения, что массивы C являются единственным истинным массивом здесь и что, строго говоря, для массива, который является массивом, он должен иметь все характеристики, которые я упоминаю в этой первой точке. Если это так, то опять-таки это подозрения, которые я ищу, чтобы подтвердить или отклонить - массивы в JS и Ruby на самом деле являются векторами, а массивы PHP - это, вероятно, таблицы какого-то рода.
Заключительное примечание: я создал эту вики сообщества, поэтому, если ответы нужно отредактировать несколько раз вместо комментариев, продолжайте и делайте это. Консенсус здесь.