Сравнение языков программирования (массив)
Эта статья в значительной степени или полностью опирается на один источник . ( июнь 2013 г. ) |
Это сравнение языков программирования (массива) сравнивает особенности структур данных массива или матричной обработки для различных языков программирования .
Синтаксис
[ редактировать ]Размеры массива
[ редактировать ]В следующем списке приведены примеры синтаксиса определения размеров (индекс первого элемента, последнего элемента или размера в элементах).
Некоторые языки индексируются с нуля. Какой-то индекс из одного. Некоторые из них не имеют такого ограничения или даже допускают индексацию по любому перечисляемому типу, а не только по целым числам.
Языки | Размер | Первый | Последний |
---|---|---|---|
Есть | имя 'Длина | имя 'Первый | имя 'Последний |
АЛГОЛ 68 | UPB Имя LWB - Имя +1 UPB 2 имени LWB - 2 имени +1 и т. д. |
LWB Имя LWB 2 Имя и т. д. |
УПБ Название 2 Имя УПБ |
АПЛ | ⍴ имя (⍴ имя )[ индекс ] |
⎕IO | (⍴ имя )-~⎕IO (⍴ имя )[ индекс ]-~⎕IO |
АВК | длина | 1 | ассорти |
C# , Visual Basic (.NET) , Windows PowerShell , F# | имя.Длина | имя .GetLowerBound( размер ) | имя .GetUpperBound( размер ) |
CFML | массивLen ( имя ) имя .len() |
1 | имя .len() |
Ч | макс(форма( имя )) | 0 | макс(форма( имя ))-1 |
Общий Лисп | длины ( имя ) | 0 | (1- (длина имени )) |
Д | имя.длина | 0 | имя.длина -1 $-1 |
Фортран | размер ( имя ) | lbound( имя ) | ubound ( имя ) |
Идти | только ( имя ) | 0 | Лен( имя ) - 1 |
Хаскелл | rangeSize ( имя границы ) | fst ( имя границы ) | snd ( имя границы ) |
ИСЛИСП | длины ( имя ) | 0 | (1- (длина имени )) |
Икона | * имя | 1 | * имя |
Кобра , D , Haxe , Java , JavaScript , Scala | имя.длина | 0 | имя.длина - 1 |
Дж | # имя | 0 | <:@# имя |
JavaScript ( ES2022 ) | имя.длина | 0 имя .at(0) [1] |
имя.длина - 1 имя .at(-1) [1] |
Юлия | длина ( имя ) размер ( имя ) |
начинать первый.(оси( имя )) |
конец последний.(оси( имя )) |
жаргон | счет ( имя ) | 1 | getLast( имя ) |
LiveCode | длина ( имя ) | 1 первый |
-1 последний |
Два | # имя | 1 по соглашению; любое целое число [2] | # имя |
Математика | Длина[ имя ] | 1 Имя ] |
-1 Фамилия ] |
MATLAB , GNU Октава | длина ( имя ) | 1 | конец |
Nim | имя .len | имя .low [3] | имя .высокое |
Оберон | ТОЛЬКО ( имя ) | 0 | ЛЕН ( имя ) - 1 |
Объектный Паскаль | Длина ( имя ) | 0 низкий ( имя ) |
Длина( имя )-1 высокий ( имя ) |
Цель-C ( NSArray * только)
|
[ количество имен ] | 0 | [ количество имен ] - 1 |
OCaml | массива.длина Имя | 0 | массива.длина Имя - 1 |
Перл | скаляр(@ имя ) | $[ | $# имя |
PHP | счет ( имя ) | 0 | количество( имя ) - 1 |
ПЛ/Я | дим( имя [,дим]) | lbound( имя [,dim]) | hbound( имя [,dim]) |
Питон | только ( имя ) | 0 | -1 Лен( имя ) - 1 |
Р | длина ( имя ) | 1 | длина ( имя ) |
Раку | @ имя.elems | 0 | @ имя .конец |
Красный | длина? имя | имя /1 имя |
фамилия |
Руби | имя .размер | 0 имя .первое |
-1 имя .размер - 1 имя .фамилия |
Ржавчина | имя .len() | 0 | имя .len() - 1 |
S-только | длина ( имя ) | 0 | -1 длина( имя )-1 |
Схема | длины вектора ( вектор ) | 0 | длины вектора (- ( вектор ) 1) |
Смолток | имени размер | 1 имя первое |
имени размер фамилия фамилия |
Быстрый | имя. считать | 0 | имя. кол-во - 1 |
Юникон | * имя | 1 | * имя |
Визуальный Бейсик | UBound( имя )-LBound( имя )+1 | LBound( имя ) | UBound( имя ) |
Вольфрам Язык | Длина[ имя ] | 1 Имя ] |
-1 Фамилия ] |
Хохо | UBound( имя ) | 0 | UBound( имя ) |
XPath / XQuery | счетчик ($ имя ) | 1 | счетчик ($ имя ) последний() массив: размер ( имя ) [4] |
Индексирование
[ редактировать ]В следующем списке приведены примеры синтаксиса доступа к одному элементу массива.
Формат | Языки |
---|---|
имя [ индекс ] или имя [ индекс 1 , индекс 2 ] и т. д. | АЛГОЛ 58 , АЛГОЛ 60 , АЛГОЛ 68 , AWK , Джулия , Модуль , Паскаль , Объектный Паскаль , C # , S-Lang [5] Иконка , Юникон |
имя [ индекс ] или имя [ индекс 1 ; индекс 2 ] и т. д. или индекс ⌷ имя или индекс 1 индекс 2 ⌷ имя и т. д. |
АПЛ |
имя [ индекс ] | ActionScript , C , CFML , Ch , Cobra , C++ , D , Go , Haxe , Java , JavaScript , Lingo , Lua , Nim , Objective-C ( NSArray * ), Перл , [5] PHP , Питон , [5] Р , Руби , [5] Раст , Свифт
|
$ имя [ индекс ] | Перл , [5] Windows PowerShell , [5] XPath / XQuery [4] |
@ имя [ индекс ] | Раку |
имя ( индекс ) или имя ( индекс 1 , индекс 2 ) и т. д. | Ada , ALGOL W , BASIC , COBOL , Fortran , RPG , GNU Octave , MATLAB , PL/I , Scala , Visual Basic , Visual Basic (.NET) , Xojo |
$ имя ( индекс ) | XPath / XQuery [4] |
имя .( индекс ) | OCaml |
имя .[ индекс ] | F# , OCaml |
имя/индекс | Красный |
имя ! индекс | Хаскелл |
$ имя ? индекс | XPath / XQuery [4] |
векторной ссылки ( индекс имени ) | Схема |
( индекс имени арефа ) | Общий Лисп |
elt ( указатель имени ) | ИСЛИСП |
имя [[ индекс ]] | Математика , [5] Вольфрам Язык |
имя в: индекс | Смолток |
[ имя объектаAtIndex: индекс ] | Цель-C ( NSArray * только)
|
индекс { имя | Дж |
имя.элемент(индекс) или имя @ индекс [6] | Эйфелева |
Нарезка
[ редактировать ]В следующем списке приведены примеры синтаксиса доступа к диапазону элементов массива.
В следующей таблице:
- first – индекс первого элемента в срезе
- последний – индекс последнего элемента в срезе
- end – на единицу больше, чем индекс последнего элемента в срезе
- len – длина среза (= конец – первый)
- шаг – количество элементов массива в каждом (по умолчанию 1)
Формат | Языки |
---|---|
имя [ первое : последнее ] | АЛГОЛ 68 , [7] Юля , Иконка , Юникон |
имя [ первое +(⍳ len )-⎕IO] | АПЛ |
имя [ первое : конец : шаг ] | Питон [8] [9] |
имя [ первое : конец ] | Идти |
имя [ первое .. последнее ] | Паскаль , Объект Паскаль , Делфи , Ним |
$ имя [ первое .. последнее ] | Windows PowerShell |
@ имя [ первое .. последнее ] | Перл [10] |
имя [ первое .. последнее ] имя [ первый ... конец ] имя [ имя , лен ] |
Руби [9] |
копировать/пропускать часть имени сначала len | Красный |
имя ( имя..фамилия ) | Есть [7] |
имя ( первое : фамилия ) | Фортран , [7] [8] GNU Октава , MATLAB [7] [10] |
имя [[ первое ;; последний ;; шаг ]] | Математика , [7] [8] [9] Вольфрам Язык |
имя [[ первое : последнее ]] | S-только [7] [8] [10] |
имя .[ первый .. шаг .. последний ] | Ф# |
имя.slice ( первый , конец ) | Да , JavaScript , Scala |
имя .slice( первый , len ) | CFML |
array_slice( имя , первое , длина ) | PHP [9] |
( имя подпоследовательности, первый конец ) | Общий Лисп |
( имя подпоследовательности, первый конец ) | ИСЛИСП |
Имя Array.sub, первая длина | OCaml |
[ имя subarrayWithRange:NSMakeRange( first , len )] | Цель-C ( NSArray * только)
|
( первый ([+i.@(-~) конец ){ имя | Дж |
имя [ первый ..< конец ] имя [ первое ... последнее ] |
Быстрый |
копия имениОт : первого до: последнего имя copyFrom: первый счетчик: len |
Смолток |
имя [ первый .. конец ] | Д , С# [11] [12] |
имя [ первый .. конец ] имя [ первое ..= последнее ] |
Ржавчина |
имя [ первое : конец ] | Кобра |
table.move(name, first, last, 1, {})
|
Два [13] |
Список перекрестных ссылок системы массивов
[ редактировать ]Язык | По умолчанию базовый индекс |
определяемый тип индекса [14] |
определяемый базовый индекс |
Связанный чек | Многомерный | Динамический размер | Векторизованные операции |
---|---|---|---|---|---|---|---|
Есть | тип индекса [15] | да | да | проверено | да | нагревать [16] | некоторые, другие определяемые [17] |
АЛГОЛ 68 | 1 | нет [18] | да | варьируется | да | да | определяемый пользователем |
АПЛ | 1 | ? | 0 или 1 [19] | проверено | да | да | да |
АВК | 1 | да, косвенно | нет | непроверенный | да, как строка с разделителями | да, перефразировал | нет |
БАЗОВЫЙ | 0 | ? | нет | проверено | нет | нагревать [16] | ? |
С | 0 | нет | нет [20] | непроверенный | частично | нагревать, [16] [21] куча [22] | нет |
Ч | 0 | нет | нет | проверено | да, еще массив массива [23] | нагревать, [16] [21] куча [22] | да |
С++ [17] | 0 | нет | нет [20] | непроверенный | да, еще массив массива [23] | куча [22] | нет |
С# | 0 | нет | частичный [24] | проверено | да | куча [22] [25] | да ( LINQ выбор ) |
CFML | 1 | нет | нет | проверено | да, еще массив массива [23] | да | нет |
КОБОЛ | 1 | нет [26] | нет | проверено | массив массива [23] [27] | нет [28] | некоторые внутренние особенности |
Кобра | 0 | нет | нет | проверено | массив массива [23] | куча | ? |
Общий Лисп | 0 | ? | нет | проверено [29] | да | да | да (карта или карта-в) |
Д | 0 | да [30] | нет | варьируется [31] | да | да | ? |
Ф# | 0 | нет | частичный [24] | проверено | да | куча [22] [25] | да (карта) |
FreeBASIC | 0 | нет | да | проверено | да | нагревать, [16] нагревать [32] | ? |
Фортран | 1 | да | да | варьируется [33] | да | да | да |
ФоксПро | 1 | ? | нет | проверено | да | да | ? |
Идти | 0 | нет | нет | проверено | массив массива [23] | нет [34] | нет |
Взломать | 0 | да | да | проверено | да | да | да |
Хаскелл | 0 | да [35] | да | проверено | да, еще массив массива [23] | нагревать [16] | ? |
МВУ | 0 | ? | нет | проверено | да | да | да |
ИСЛИСП | 0 | ? | нет | проверено | да | нагревать [16] | да (карта или карта-в) |
Дж | 0 | ? | нет | проверено | да | да | да |
Ява [17] | 0 | нет | нет | проверено | массив массива [23] | нагревать [16] | ? |
JavaScript | 0 | нет | нет | проверено [36] | массив массива [23] | да | да |
Юлия | 1 | да | да | отмечено (может быть пропущено локально или глобально пользователем) | да, еще массив массива | да | да |
жаргон | 1 | ? | ? | непроверенный | да | да | да |
Два | 1 | ? | частичный [37] | проверено | массив массива [23] | да | ? |
Математика | 1 | нет | нет | проверено | да | да | да |
МАТЛАБ | 1 | ? | нет | проверено | да [38] | да | да |
Nim | 0 | да [3] | да | необязательный [39] | массив массива [23] | да | да [40] |
Оберон | 0 | ? | нет | проверено | да | нет | ? |
Оберон-2 | 0 | ? | нет | проверено | да | да | ? |
Цель-C [17] | 0 | нет | нет | проверено | массив массива [23] | да | нет |
OCaml | 0 | нет | нет | проверено по умолчанию | массив массива [23] | нагревать [16] | ? |
Паскаль , Объектный Паскаль | тип индекса [15] | да | да | варьируется [41] | да | варьируется [42] | некоторый |
Перл | 0 | нет | да ( $[ )
|
проверено [36] | массив массива [23] | да | нет [43] |
Раку | 0 | нет | нет | проверено [36] | да | да | да |
PHP | 0 | да [44] | да [44] | проверено [44] | да | да | да |
ПЛ/Я | 1 | да | да | необязательный | да | нет | да [45] |
Питон | 0 | нет | нет | проверено | массив массива [23] | да | нет [46] |
РПГ | 1 | нет | нет | ? | нет | нет | ? |
Р | 1 | ? | нет | непроверенный | да, еще массив массива | да | да |
Кольцо | 1 | ? | частичный [37] | проверено | массив массива [23] | да | ? |
Руби | 0 | нет | нет | проверено [36] | массив массива [23] | да | ? |
Ржавчина | 0 | нет | нет | проверено | массив массива [23] | нет | ? |
Сасс | 1 | нет | нет | проверено | массив массива [23] | нагревать [31] | ? |
S-только | 0 | ? | нет | проверено | да | да | да |
Скала | 0 | нет | нет | проверено | массив массива [23] | нагревать [16] | да (карта) |
Схема | 0 | ? | нет | проверено | массив массива [23] | нагревать [16] | да (карта) |
Смолток [17] | 1 | ? | нет | проверено | массив массива [23] | да [47] | ? |
Быстрый | 0 | нет | нет | проверено | массив массива [23] | да | ? |
Визуальный Бейсик | 0, 1 или тип индекса [48] | нет | да | проверено | да | да | ? |
Визуальный Бейсик (.NET) | 0 или тип индекса [48] | нет | частичный [24] | проверено | да | да | да ( LINQ выбор ) |
Вольфрам Язык | 1 | нет | нет | проверено | да | да | да |
Windows PowerShell | 0 | нет | нет | проверено | да | куча | ? |
Хохо | 0 | нет | нет | проверено | да | да | нет |
XPath / XQuery | 1 | нет | нет | проверено | массив массива [4] [23] | да | да |
Векторизованные операции с массивами
[ редактировать ]Некоторые компилируемые языки, такие как Ada и Fortran , а также некоторые языки сценариев, такие как IDL , MATLAB и S-Lang , имеют встроенную поддержку векторизованных операций с массивами. Например, чтобы выполнить поэлементное суммирование двух массивов, а и б произвести третий c , нужно только написать
c = a + b
Помимо поддержки векторизованных арифметических и реляционных операций, эти языки также векторизуют общие математические функции, такие как синус. Например, если x — массив, тогда
y = sin (x)
приведет к массиву y, элементы которого являются синусом соответствующих элементов массива х .
Также поддерживаются векторизованные индексные операции. В качестве примера:
even = x(2::2);
odd = x(::2);
это то, как можно использовать Фортран для создания массивов из четных и нечетных записей массива. Другое распространенное использование векторизованных индексов — операция фильтрации. Рассмотрим операцию ограничения синусоидальной волны, при которой амплитуды, превышающие 0,5, должны быть установлены на 0,5. Используя S-Lang , это можно сделать с помощью
y = sin(x); y[where(abs(y)>0.5)] = 0.5;
Математические матричные операции
[ редактировать ]Язык/ Библиотека |
Создавать | Определитель | Транспонировать | Элемент | Столбец | Ряд | Собственные значения |
---|---|---|---|---|---|---|---|
АПЛ | m←dims⍴x11 x12 ...
|
-.×m
|
⍉m
|
m[i;j] или i j⌷m
|
m[;j] или j⌷[2]m или j⌷⍤1⊢m или j⌷⍉m
|
m[i;] или i⌷m
|
⌹⍠1⊢m
|
Фортран | m = RESHAPE([x11, x12, ...], SHAPE(m))
|
TRANSPOSE(m)
|
m(i,j)
|
m(:,j)
|
m(i,:)
|
||
Ч [49] | m = {... }
|
determinant(m)
|
transpose(m)
|
m[i-1][j-1]
|
shape(m,0)
|
shape(m,1)
|
eigen(output, m, NULL)
|
Джулия и ее стандартная библиотека LinearAlgebra
|
m = [1 2; 3 4] или
m = [
1 2
3 4
]
|
det(m)
|
transpose(m) или
|
m[i, j]
|
m[:, j]
|
m[i, :]
|
eigen(m).values
|
Математика / Вольфрам Язык |
{{x11, x12, ...}, ...}
|
Det[m]
|
Transpose[m]
|
m[[i,j]]
|
m[[;;,j]]
|
m[[i]]
|
Eigenvalues[m]
|
МАТЛАБ / GNU Октава |
m = [...]
|
det(m)
|
m.'
|
m(i,j)
|
m(:,j)
|
m(i,:)
|
eig(m)
|
NumPy | m = mat(...)
|
linalg.det(m)
|
m.T
|
m[i-1,j-1]
|
m[:,j-1]
|
m[i-1,:]
|
linalg.eigvals(m)
|
Р | m <- matrix(...) или m <- array(...)
|
det(m)
|
t(m)
|
m[i, j]
|
m[, j]
|
m[i, ]
|
eigen(m)
|
S-только | m = reshape([x11, x12, ...], [new-dims])
|
m = transpose(m)
|
m[i,j]
|
m[*,j]
|
m[j,*]
|
||
СимПи | m = Matrix(...)
|
m.det()
|
m.T
|
m[i-1,j-1]
|
m.col(j-1)
|
m.row(i-1)
|
m.eigenvals()
|
Ссылки
[ редактировать ]- ^ Jump up to: а б «Спецификация языка ECMAScript® 2025» .
- ^ «Программирование на Lua: 11.1» .
- ^ Jump up to: а б «Урок Нима (Часть I)» .
- ^ Jump up to: а б с д и XPath/XQuery имеет два типа массивов. Последовательности (1,2,3), которые не могут быть вложены в массивы версий XPath/XQuery 3.1. массив { 1,2,3 } или [1,2,3] который может.
- ^ Jump up to: а б с д и ж г Индекс может быть отрицательным числом, указывающим соответствующее количество мест до конца массива.
- ^ «Эйффельдок: МАССИВ» .
- ^ Jump up to: а б с д и ж Срезы для многомерных массивов также поддерживаются и определяются аналогичным образом.
- ^ Jump up to: а б с д Срезы типа
first:last:step
также поддерживаются. - ^ Jump up to: а б с д последний или end может быть отрицательным числом, указывающим на необходимость остановки на соответствующем количестве мест перед концом массива.
- ^ Jump up to: а б с В более общем смысле, для одномерных массивов Perl и S-Lang допускают фрагменты вида
array[indices]
, гдеindices
может быть диапазоном, указанным в сноске 2, или явным списком индексов, например, '[0,9,3,4]
', или смесь того и другого, например,A[[[0:3]],7,9,[11:2:-3]]]
. - ^ C# 8.0 (по состоянию на 29 августа 2019 г.) Предлагаемая функция [update])
- ^ «Диапазоны — предложения по языку C# 8.0» . Документы Майкрософт . Майкрософт . Проверено 29 августа 2019 г.
- ^ «Справочное руководство по Lua 5.3» . www.lua.org . Проверено 2 апреля 2022 г.
- ^ Тип индекса может быть свободно выбранным целочисленным , перечисляемым или символьным типом . О массивах с некомпактными типами индексов см.: Ассоциативный массив.
- ^ Jump up to: а б Базовый индекс по умолчанию — это наименьшее значение используемого типа индекса.
- ^ Jump up to: а б с д и ж г час я дж к Размер можно выбрать только при инициализации, после чего он фиксируется.
- ^ Jump up to: а б с д и В этом списке строго сравниваются языковые особенности. На каждом языке (даже на языке ассемблера ) можно улучшить обработку массивов с помощью дополнительных библиотек. В этом языке улучшена обработка массивов как часть стандартной библиотеки.
- ^ Массивы ALGOL 68 должны быть индексированы (и разделены) по типу. ИНТ . Однако хэш-функция может использоваться для преобразования других типов в ИНТ . например имя [ хеш("строка") ]
- ^ База индексации может быть 0 или 1 в соответствии с системной переменной. ⎕ИО . Это значение может применяться ко всей «рабочей области» или быть локализовано для определяемой пользователем функции или одной примитивной функции с помощью оператора Variant ( ⍠ ).
- ^ Jump up to: а б Поскольку C не проверяет индексы по привязке, можно определить указатель на внутреннюю часть любого массива, который будет символически действовать как псевдомассив, вмещающий отрицательные индексы или любое начало целочисленного индекса.
- ^ Jump up to: а б C99 позволяет использовать массивы переменного размера; однако почти нет компилятора, поддерживающего эту новую функцию.
- ^ Jump up to: а б с д и Размер можно выбрать только при инициализации, когда память выделяется в куче, а не в стеке. Это замечание не обязательно делать для языка, который всегда размещает массивы в куче.
- ^ Jump up to: а б с д и ж г час я дж к л м н тот п д р с т в v В х Позволяет создавать массивы массивов, которые можно использовать для эмуляции большинства, но не всех аспектов многомерных массивов.
- ^ Jump up to: а б с Базу можно изменить при инициализации с помощью System.Array.CreateInstance (который возвращает System.Array ), но не при использовании синтаксиса языка. Массивы с ненулевыми базовыми индексами не относятся к тому же типу, что и массивы с нулевыми базовыми индексами, и ими нельзя манипулировать с помощью синтаксиса языка ( GetValue и SetValue ) или привести к определенному типу ( Вместо этого необходимо использовать методы T[] в C# или T() в VB.NET), предотвращая поломку кода, предполагая, что базовые индексы равны нулю.
- ^ Jump up to: а б Позволяет создавать массивы фиксированного размера в «небезопасном» коде, обеспечивая улучшенную совместимость с другими языками.
- ^ Массивы COBOL могут индексироваться с помощью типов «INDEX», отличных от целочисленных типов.
- ^ Хотя в COBOL есть только массивы массивов, доступ к элементам массива можно получить с помощью синтаксиса, подобного многомерному массиву, где язык автоматически сопоставляет индексы с массивами, содержащими элемент, на который ссылаются.
- ^ COBOL предоставляет способ указать, что полезный размер массива является переменным, но он никогда не может превышать объявленный максимальный размер, который также является выделенным размером.
- ^ Большинство реализаций Common Lisp позволяют выборочно отключать проверку.
- ^ Ассоциативные массивы - язык программирования D
- ^ Jump up to: а б Поведение можно настроить с помощью переключателей компилятора. Как и в DMD 1.0, границы проверяются в режиме отладки и снимаются в режиме выпуска для повышения эффективности.
- ^ FreeBASIC поддерживает как массивы переменной длины, так и массивы фиксированной длины. Массивы, объявленные без диапазона индексов, создаются как массивы переменной длины, а массивы с объявленным диапазоном создаются как массивы фиксированной длины.
- ^ Почти все реализации Фортрана предлагают варианты проверки границ с помощью переключателей компилятора. Однако по умолчанию проверка границ обычно отключена для повышения эффективности.
- ^ Хотя тип Array в Golang не имеет динамического размера, тип данных Slice имеет динамический размер и используется гораздо чаще, чем массивы.
- ^ Массивы Haskell (Data.Array) позволяют использовать в качестве типа индекса любой тип, являющийся экземпляром Ix. Таким образом, пользовательский тип может быть определен и использован в качестве индексного типа, если он является экземпляром Ix. Кроме того, кортежи типов Ix также являются типами Ix; это обычно используется для реализации многомерных массивов
- ^ Jump up to: а б с д В этих языках можно получить доступ или записать индекс массива, больший или равный длине массива, и массив неявно вырастет до этого размера. На первый взгляд может показаться, что границы не проверяются; однако границы проверяются, чтобы принять решение об увеличении массива, и у вас нет небезопасного доступа к памяти, как в C.
- ^ Jump up to: а б Указав базовый индекс, можно создавать массивы с произвольной базой. Однако по умолчанию оператор длины Lua не учитывает базовый индекс массива при вычислении длины. Это поведение можно изменить с помощью метаметодов.
- ^ Не менее 2 измерений (скалярные числа — это массивы 1×1, векторы — массивы 1×n или n×1).
- ^ «Руководство пользователя компилятора Nim» .
- ^ «Векторизация — логическая векторная операция в стиле R в Nim» .
- ^ Многие реализации ( Turbo Pascal , Object Pascal ( Delphi ), Free Pascal ) позволяют изменять поведение с помощью переключателей компилятора и встроенных директив.
- ^ Зависит от реализации. Более новые реализации ( Free Pascal , Object Pascal ( Delphi )) позволяют использовать динамические массивы на основе кучи.
- ^ Стандартные типы данных массива Perl не поддерживают векторизованные операции, как определено здесь. Однако расширение языка данных Perl добавляет объекты массива с этой возможностью.
- ^ Jump up to: а б с «Массивы» PHP — это ассоциативные массивы. В качестве ключей (индексов) можно использовать целые числа и строки; В качестве ключа также можно использовать числа с плавающей запятой, но они усекаются до целых чисел. На самом деле не существует никакого «базового индекса» или «границ».
- ^ Размер можно выбрать при объявлении массива или при его выделении, после чего он фиксируется.
- ^ Стандартный тип массива Python ,
list
, не поддерживает векторизованные операции, определенные здесь. Однако расширение numpy добавляет объекты массива с этой возможностью. - ^ Класс Array имеет фиксированный размер, но OrderedCollection является динамическим.
- ^ Jump up to: а б Microsoft QBASIC, QuickBASIC , Visual Basic и VBA имели/имеют возможность указывать Option Base 1 , что приводило к тому, что все массивы в модуле по умолчанию начинались с 1 вместо 0. Поддержка Option Base была прекращена в Visual Basic (. СЕТЬ) . В различных реализациях Microsoft BASIC массивы могут быть DIMensioned с помощью to, чтобы указать минимальное и максимальное значения индекса (например, DIM MyArray(2 to 50) AS STRING будет иметь первый индекс 2 вместо значения по умолчанию).
- ^ Численные характеристики Ch