Из Википедии, свободной энциклопедии
Перейти к навигации Перейти к поиску

Это сравнение языков программирования (массив) сравнивает особенности структур данных массива или матричной обработки для более чем 48 различных языков программирования .

Синтаксис [ править ]

Размеры массива [ править ]

Следующий список содержит примеры синтаксиса того, как определять размеры (индекс первого элемента, последнего элемента или размер в элементах).

Обратите особое внимание на то, что некоторые языки индексируют с нуля, а другие - с единицы. По крайней мере, со времени знаменитого эссе Дейкстры [1] индексирование с нуля считается лучшим, и новые языки, как правило, используют его.

Индексирование [ править ]

В следующем списке приведены примеры синтаксиса того, как получить доступ к отдельному элементу массива.

Нарезка [ править ]

Следующий список содержит примеры синтаксиса того, как можно получить доступ к диапазону элементов массива.

В следующей таблице:

  • first - индекс первого элемента в срезе
  • last - индекс последнего элемента в срезе
  • end - на единицу больше, чем индекс последнего элемента в срезе
  • len - длина среза (= конец - первый)
  • step - количество элементов массива в каждом (по умолчанию 1)

Список перекрестных ссылок системы массивов [ править ]

Операции с векторизованными массивами [ править ]

Некоторые компилируемые языки, такие как Ada и Fortran , и некоторые языки сценариев, такие как IDL , MATLAB и S-Lang , имеют встроенную поддержку векторизованных операций с массивами. Например, чтобы выполнить поэлементную сумму двух массивов, a и b, чтобы получить третий c , необходимо только написать

 с = а + Ь

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

 у = грех (х)

приведет к массиву y , элементы которого являются синусами соответствующих элементов массива x .

Также поддерживаются операции с векторизованным индексом. Например,

 четное  =  х ( 2 :: 2 );  нечетное  =  х ( :: 2 );

это то, как можно было бы использовать Fortran для создания массивов из четных и нечетных записей массива. Еще одно распространенное использование векторизованных индексов - это операция фильтрации. Рассмотрим операцию ограничения синусоидальной волны, когда амплитуды больше 0,5 должны быть установлены на 0,5. Используя S-Lang , это можно сделать с помощью

 у = грех (х); y [где (abs (y)> 0,5)] = 0,5;

Математические матричные операции [ править ]

Ссылки [ править ]

  1. ^ https://www.cs.utexas.edu/users/EWD/transcriptions/EWD08xx/EWD831.html
  2. ^ https://www.lua.org/pil/11.1.html
  3. ^ https://nim-lang.org/docs/tut1.html#advanced-types-arrays
  4. ^ a b c d e XPath / XQuery имеет два типа массивов. Последовательности (1,2,3), которые не могут быть вложены, и в массивы массивов версии XPath / XQuery 3.1 {1,2,3 } или [1,2,3], которые могут.
  5. ^ a b c d e f g Индекс может быть отрицательным числом, указывающим соответствующее количество разрядов перед концом массива.
  6. ^ http://smarteiffel.loria.fr/libraries/api/lib.d/storage.d/loadpath.se.d/collection.d/ARRAY/ANY.html
  7. ^ a b c d e f Срезы для многомерных массивов также поддерживаются и определяются аналогично.
  8. ^ a b c d Также поддерживаются срезы этого типа .first:last:step
  9. ^ a b c d last или end может быть отрицательным числом, указывающим на остановку на соответствующем количестве мест перед концом массива.
  10. ^ a b c В более общем смысле, для одномерных массивов Perl и S-Lang допускают срезы формы , где может быть диапазон, указанный в сноске 2, или явный список индексов, например, ' ', или сочетание того и другого. , например, .array[indices]indices[0,9,3,4]A[[[0:3]],7,9,[11:2:-3]]]
  11. ^ Предлагаемая функция C # 8.0 (по состоянию на 29 августа 2019 г.)
  12. ^ «Диапазоны - языковые предложения C # 8.0» . Документы Microsoft . Microsoft . Проверено 29 августа 2019 .
  13. ^ a b Тип индекса может быть произвольно выбранным целочисленным типом , нумерованным типом или символьным типом . Для массивов с некомпактными типами индекса см .: Ассоциативный массив
  14. ^ a b Базовый индекс по умолчанию - это наименьшее значение используемого типа индекса.
  15. ^ a b c d e f g h i j k Размер может быть выбран только при инициализации, после которой он фиксируется
  16. ^ a b c d e В этом списке строго сравниваются языковые особенности. На любом языке (даже на ассемблере) можно улучшить обработку массивов с помощью дополнительных библиотек. В этом языке улучшена обработка массивов как часть стандартной библиотеки.
  17. ^ Массивы ALGOL 68 должны быть разделены индексами (и нарезаны) по типу INT . Однако хеш-функция может использоваться для преобразования других типов в INT . например, имя [ хеш ("строка") ]
  18. ^ База индексации может быть 0 или 1 в соответствии с системной переменной ⎕IO . Это значение может применяться ко всей «рабочей области» или быть локализовано для пользовательской функции или отдельной примитивной функции с помощью оператора Variant ( ).
  19. ^ a b Поскольку C не выполняет привязку индексов, может быть определен указатель на внутреннюю часть любого массива, который будет символически действовать как псевдо-массив, вмещающий отрицательные индексы или любое целочисленное начало индекса.
  20. ^ a b C99 позволяет использовать массивы переменного размера; однако компилятора для поддержки этой новой функции почти нет.
  21. ^ a b c d e Размер может быть выбран только при инициализации, когда память выделяется в куче, в отличие от того, когда она выделяется в стеке. Это примечание не нужно делать для языка, который всегда выделяет массивы в куче.
  22. ^ a b c d e f g h i j k l m n o p q r s t u v w Позволяет использовать массивы массивов, которые можно использовать для эмуляции большинства, но не всех аспектов многомерных массивов
  23. ^ a b c Базу можно изменить при инициализации с помощью System.Array.CreateInstance (которая возвращает System.Array ), но не при использовании синтаксиса языка. Массивы с ненулевыми базовыми индексами не относятся к тому же типу, что и массивы с нулевыми базовыми индексами, и ими нельзя управлять с помощью синтаксиса языка ( вместо этого должны использоваться методы GetValue и SetValue ) или приведением к определенному типу ( T [] в C # или T () в VB.NET), предотвращая поломку кода, предполагающего нулевые базовые индексы.
  24. ^ a b Позволяет создавать массивы фиксированного размера в «небезопасном» коде, обеспечивая улучшенную совместимость с другими языками.
  25. ^ Массивы COBOL могут быть проиндексированы типами "INDEX", отличными от целочисленных типов.
  26. ^ В то время как COBOL имеет только массивы-массивы, к элементам массива можно получить доступ с помощью синтаксиса, подобного многомерному массиву, где язык автоматически сопоставляет индексы с массивами, содержащими элемент, на который ссылается
  27. ^ COBOL предоставляет способ указать, что используемый размер массива является переменным, но он никогда не может быть больше объявленного максимального размера, который также является выделенным размером
  28. ^ Большинство распространенных реализаций Lisp позволяют выборочно отключать проверку
  29. ^ Ассоциативные массивы - язык программирования D
  30. ^ a b Поведение можно настроить с помощью переключателей компилятора. Как и в DMD 1.0, границы проверяются в режиме отладки и не проверяются в режиме выпуска для эффективности.
  31. ^ FreeBASIC поддерживает как массивы переменной длины, так и массивы фиксированной длины. Массивы, объявленные без диапазона индексов, создаются как массивы переменной длины, в то время как массивы с объявленным диапазоном создаются как массивы фиксированной длины.
  32. ^ Почти все реализации Fortran предлагают опции проверки границ с помощью переключателей компилятора. Однако по умолчанию проверка границ обычно отключена для повышения эффективности.
  33. ^ Хотя тип Golang Array не имеет динамического размера, тип данных Slice имеет динамический размер и используется гораздо чаще, чем массивы.
  34. ^ Массивы Haskell (Data.Array) позволяют использовать в качестве типа индекса любой тип, являющийся экземпляром Ix. Таким образом, пользовательский тип может быть определен и использован в качестве типа индекса, если он содержит Ix. Кроме того, кортежи типов Ix также являются типами Ix; это обычно используется для реализации многомерных массивов
  35. ^ a b c d В этих языках можно получить доступ или записать индекс массива, больший или равный длине массива, и массив будет неявно увеличиваться до этого размера. Сначала может показаться, что границы не проверяются; однако границы проверяются, чтобы принять решение о росте массива, и у вас нет небезопасного доступа к памяти, как в C
  36. ^ a b Указав базовый индекс, можно создавать массивы с произвольной базой. Однако по умолчанию оператор длины Lua не учитывает базовый индекс массива при вычислении длины. Это поведение можно изменить с помощью метаметодов.
  37. ^ Минимум 2 измерения (скалярные числа - это массивы 1 × 1, векторы - это массивы 1 × n или n × 1)
  38. ^ https://nim-lang.org/docs/tut1.html#advanced-types-arrays
  39. ^ https://nim-lang.org/docs/nimc.html
  40. ^ https://stackoverflow.com/questions/53084192/r-style-logical-vector-operation-in-nim
  41. ^ Многие реализации (Turbo Pascal, Object Pascal (Delphi), FreePascal) позволяют изменять поведение с помощью переключателей компилятора и встроенных директив
  42. ^ Зависит от реализации. Новые реализации (FreePascal, Object Pascal (Delphi)) позволяют использовать динамические массивы на основе кучи.
  43. ^ Стандартныетипы данных массивов Perl не поддерживают векторизованные операции, как определено здесь. Однакорасширение Perl Data Language добавляет объекты массивов с этой возможностью.
  44. ^ a b c "Массивы" PHP - это ассоциативные массивы. В качестве ключей (индексов) можно использовать целые числа и строки; В качестве ключа также можно использовать числа с плавающей запятой, но они усекаются до целых чисел. На самом деле нет никакого "базового индекса" или "границ"
  45. ^ Стандартныйтип массива Python ,,listне поддерживает векторизованные операции, как определено здесь. Однакорасширение numpy добавляет объекты массива с этой возможностью
  46. ^ Класс Array имеет фиксированный размер, но OrderedCollection является динамическим.
  47. ^ Ch числовые особенности