Comparação de linguagens de programação (array) - Comparison of programming languages (array)

Esta comparação de linguagens de programação (array) compara os recursos de estruturas de dados de array ou processamento de matriz para mais de 48 várias linguagens de programação de computador .

Sintaxe

Dimensões da matriz

A lista a seguir contém exemplos de sintaxe de como determinar as dimensões (índice do primeiro elemento, o último elemento ou o tamanho dos elementos).

Observe particularmente que alguns idiomas indexam a partir do zero, enquanto outros indexam a partir de um. Pelo menos desde o famoso ensaio de Dijkstra , a indexação baseada em zero tem sido vista como superior, e novas linguagens tendem a usá-la.

línguas Tamanho Primeiro Último
Ada nome 'Comprimento nome 'primeiro nome 'último
ALGOL 68 UPB nome - LWB nome +1
2 UPB nome - 2 LWB nome +1
etc.
Nome LWB
2 Nome LWB
etc.
Nome UPB

2 nome UPB
etc.

APL nome
(⍴ nome ) [ índice ]
⎕IO (⍴ nome ) - ~ ⎕IO
(⍴ nome ) [ índice ] - ~ ⎕IO
AWK comprimento 1 Asorti
C # , Visual Basic .NET , Windows PowerShell , F # name .Length nome .GetLowerBound ( dimensão ) nome .GetUpperBound ( dimensão )
CFML arrayLen ( nome )
nome .len ()
1 nome .len ()
CH max (forma ( nome )) 0 máx (forma ( nome )) - 1
Lisp Comum ( nome do comprimento ) 0 (1- (comprimento do nome ))
D name .length 0 nome .length-1
$ -1
Fortran TAMANHO ( nome ) LBOUND ( nome ) UBOUND ( nome )
Ir len ( nome ) 0 len ( nome ) - 1
Haskell rangeSize ( nome dos limites ) fst ( nome dos limites ) snd ( nome dos limites )
ISLISP ( nome do comprimento ) 0 (1- (comprimento do nome ))
Cobra , D , Haxe , Java , JavaScript , Scala name .length 0 nome .length - 1
J # nome 0 <: @ # nome
Julia comprimento ( nome )
tamanho ( nome )
1
primeiro. (Eixos ( nome ))
fim por
último. (eixos ( nome ))
Lingo contagem ( nome ) 1 getLast ( nome )
LiveCode comprimento ( nome ) 1
primeiro
-1
último
Lua # nome 1 por convenção; qualquer inteiro # nome
Mathematica Comprimento [ nome ] 1
Primeiro [ nome ]
-1
Sobrenome [ nome ]
MATLAB , GNU Octave comprimento ( nome ) 1 fim
Nim nome .len nome .low nome .alto
Oberon LEN ( nome ) 0 LEN ( nome ) - 1
Object Pascal Comprimento ( nome ) 0
baixo ( nome )
Comprimento ( nome ) -1
alto ( nome )
Objective-C ( NSArray *apenas) [ contagem de nomes ] 0 [ contagem de nomes ] - 1
OCaml Array.length name 0 Array.length name - 1
Perl escalar (@ nome ) $ [ $ # nome
PHP contagem ( nome ) 0 contagem ( nome ) - 1
Pitão len ( nome ) 0 -1
len ( nome ) - 1
R comprimento ( nome ) 1 comprimento ( nome )
Raku @ name .elems 0 @ name .end
vermelho comprimento? nome nome / 1
primeiro nome
último nome
Rubi nome .size 0
nome .primeiro
-1
nome .tamanho - 1
nome .último
Ferrugem nome .len () 0 nome .len () - 1
Gíria comprimento ( nome ) 0 -1
comprimento ( nome ) -1
Esquema (vetor de comprimento de vetor ) 0 (- (vetor de comprimento de vetor ) 1)
Conversa fiada tamanho do nome 1
nome primeiro
nome tamanho
nome último
Rápido nome. contar 0 nome. contagem - 1
Visual básico UBound ( nome ) -LBound ( nome ) +1 LBound ( nome ) UBound ( nome )
Wolfram Language Comprimento [ nome ] 1
Primeiro [ nome ]
-1
Sobrenome [ nome ]
Xojo UBound ( nome ) 0 UBound ( nome )
XPath / XQuery contagem ($ name ) 1 count ($ name )
last ()
array: size ( nome )

Indexando

A lista a seguir contém exemplos de sintaxe de como acessar um único elemento de uma matriz.

Formato línguas
nome [ índice ] ou nome [ índice 1 , índice 2 ] etc. ALGOL 58 , ALGOL 60 , ALGOL 68 , AWK , Modula , Pascal , Object Pascal , C # , S-Lang
nome [ índice ] ou nome [ índice 1 ; índice 2 ] etc.
ou índice nome ou índice 1 índice 2 nome etc.
APL
nome [ índice ] ActionScript , C , CFML , Ch , Cobra , C ++ , D , Go , Haxe , Java , JavaScript , Julia , Lingo , Lua , Nim , Objective-C ( NSArray *), Perl , PHP , Python , R , Ruby , Rust , Swift
$ name [ index ] Perl , Windows PowerShell , XPath / XQuery
@ name [ index ] Raku
nome ( índice ) ou nome ( índice 1 , índice 2 ) etc. Ada , ALGOL W , BASIC , COBOL , Fortran , RPG , GNU Octave , MATLAB , PL / I , Scala , Visual Basic , Visual Basic .NET , Xojo
$ name ( índice ) XPath / XQuery
nome . ( índice ) OCaml
nome . [ índice ] F # , OCaml
nome / índice vermelho
nome  ! índice Haskell
$ name  ? índice XPath / XQuery
( índice de nome de vetor-ref ) Esquema
( índice do nome do aref ) Lisp Comum
( índice de nome elt ) ISLISP
nome [[ índice ]] Mathematica , Wolfram Language
nome em: índice Conversa fiada
[ nome objectAtIndex: index ] Objective-C ( NSArray *apenas)
indexar { nome J
name.item (index) ou name @ index Eiffel

Fatiamento

A lista a seguir contém exemplos de sintaxe de como um intervalo de elemento de uma matriz pode ser acessado.

Na seguinte tabela:

  • primeiro - o índice do primeiro elemento da fatia
  • último - o índice do último elemento da fatia
  • fim - um a mais que o índice do último elemento da fatia
  • len - o comprimento da fatia (= fim - primeiro)
  • step - o número de elementos da matriz em cada (padrão 1)
Formato línguas
nome [ primeiro : último ] ALGOL 68 , Julia
nome [ primeiro + (⍳ len ) -⎕IO] APL
nome [ primeiro : fim : etapa ] Pitão
nome [ primeiro : fim ] Ir
nome [ primeiro .. último ] Pascal , Object Pascal , Delphi , Nim
$ name [ primeiro .. último ] Windows PowerShell
@ nome [ primeiro .. último ] Perl
nome [ primeiro .. última ]
nome [ primeiro ... final ]
nome [ primeira , len ]
Rubi
copiar / pular parte nome primeiro len vermelho
nome ( primeiro .. último ) Ada
nome ( primeiro : último ) Fortran , GNU Octave , MATLAB
nome [[ primeiro ;; último ;; passo ]] Mathematica , Wolfram Language
nome [[ primeiro : último ]] Gíria
nome . [ primeira .. etapa .. última ] F #
nome .slice ( primeiro , fim ) Haxe , JavaScript , Scala
nome .slice ( primeiro , len ) CFML
array_slice ( nome , primeiro , len ) PHP
(subseq nome primeiro fim ) Lisp Comum
(subseq nome primeiro fim ) ISLISP
Array.sub name first len OCaml
[ nome subarrayWithRange: NSMakeRange ( primeiro , len )]    Objective-C ( NSArray *apenas)
( primeiro ([+ i. @ (- ~) fim ) { nome J
nome [ primeiro .. < fim ]
nome [ primeiro ... último ]
Rápido
name copyFrom: first to: last
name copyFrom: primeira contagem: len
Conversa fiada
nome [ primeiro .. fim ] D , C #
nome [ primeiro .. fim ]
nome [ primeiro .. = último ]
Ferrugem
nome [ primeiro : fim ] Cobra

Lista de referência cruzada do sistema array

Língua
Índice de base padrão

Tipo de índice especificável

Índice de base especificável
Verificação de limite Multidimensional De tamanho dinâmico Operações vetorizadas
Ada tipo de índice sim sim verificado sim iniciar alguns, outros definíveis
ALGOL 68 1 não sim varia sim sim definível pelo usuário
APL 1 ? 0 ou 1 verificado sim sim sim
AWK 1 sim implicitamente não não verificado sim, como string delimitada sim, refeito não
BASIC 0 ? não verificado não iniciar ?
C 0 não não não verificado parcialmente init, heap não
CH 0 não não verificado sim, também array de array init, heap sim
C ++ 0 não não não verificado sim, também array de array amontoar não
C # 0 não parcial verificado sim amontoar sim ( LINQ select)
CFML 1 não não verificado sim, também array de array sim não
COBOL 1 não não verificado matriz de matriz não alguns intrínsecos
Cobra 0 não não verificado matriz de matriz amontoar ?
Lisp Comum 0 ? não verificado sim sim sim (mapear ou mapear)
D 0 sim não varia sim sim ?
F # 0 não parcial verificado sim amontoar sim (mapa)
FreeBASIC 0 não sim verificado sim init, init ?
Fortran 1 sim sim varia sim sim sim
FoxPro 1 ? não verificado sim sim ?
Ir 0 não não verificado matriz de matriz não não
Hackear 0 sim sim verificado sim sim sim
Haskell 0 sim sim verificado sim, também array de array iniciar ?
IDL 0 ? não verificado sim sim sim
ISLISP 0 ? não verificado sim iniciar sim (mapear ou mapear)
J 0 ? não verificado sim sim sim
Java 0 não não verificado matriz de matriz iniciar ?
JavaScript 0 não não verificado matriz de matriz sim sim
Julia 1 sim sim verificado sim sim sim
Lingo 1 ? ? não verificado sim sim sim
Lua 1 ? parcial verificado matriz de matriz sim ?
Mathematica 1 não não verificado sim sim sim
MATLAB 1 ? não verificado sim sim sim
Nim 0 sim sim opcional matriz de matriz sim sim
Oberon 0 ? não verificado sim não ?
Oberon-2 0 ? não verificado sim sim ?
Objective-C 0 não não verificado matriz de matriz sim não
OCaml 0 não não verificado por padrão matriz de matriz iniciar ?
Pascal , Object Pascal tipo de índice sim sim varia sim varia algum
Perl 0 não sim ( $[) verificado matriz de matriz sim não
Raku 0 não não verificado sim sim sim
PHP 0 sim sim verificado sim sim sim
PL / I 1 ? sim verificado sim não ?
Pitão 0 não não verificado matriz de matriz sim não
RPG 1 não não ? não não ?
R 1 ? não não verificado sim, também array de array sim sim
Anel 1 ? parcial verificado matriz de matriz sim ?
Rubi 0 não não verificado matriz de matriz sim ?
Ferrugem 0 não não verificado sim ? ?
Sass 1 não não verificado matriz de matriz iniciar ?
Gíria 0 ? não verificado sim sim sim
Scala 0 não não verificado matriz de matriz iniciar sim (mapa)
Esquema 0 ? não verificado matriz de matriz iniciar sim (mapa)
Conversa fiada 1 ? não verificado matriz de matriz sim ?
Rápido 0 não não verificado matriz de matriz sim ?
Visual básico 0 não sim verificado sim sim ?
Visual Basic .NET 0 não parcial verificado sim sim sim ( LINQ select)
Wolfram Language 1 não não verificado sim sim sim
Windows PowerShell 0 não não verificado sim amontoar ?
Xojo 0 não não verificado sim sim não
XPath / XQuery 1 não não verificado matriz de matriz sim sim

Operações vetorizadas de matriz

Algumas linguagens compiladas, como Ada e Fortran , e algumas linguagens de script, como IDL , MATLAB e S-Lang , têm suporte nativo para operações vetorizadas em matrizes. Por exemplo, para realizar um elemento por elemento soma de duas matrizes, uma e b para produzir um terceiro c , só é necessário para escrever

 c = a + b

Além do suporte para operações aritméticas e relacionais vetorizadas, essas linguagens também vetorizam funções matemáticas comuns, como seno. Por exemplo, se x é uma matriz, então

 y = sin (x)

resultará em uma matriz y cujos elementos são seno dos elementos correspondentes da matriz x .

As operações de índice vetorizado também são suportadas. Como um exemplo,

 even = x(2::2);
 odd = x(::2);

é como se usaria o Fortran para criar matrizes a partir das entradas pares e ímpares de uma matriz. Outro uso comum de índices vetorizados é uma operação de filtragem. Considere uma operação de recorte de uma onda senoidal onde as amplitudes maiores que 0,5 devem ser definidas como 0,5. Usando S-Lang , isso pode ser feito por

 y = sin(x);
 y[where(abs(y)>0.5)] = 0.5;

Operações matemáticas de matriz

Linguagem /
Biblioteca
Crio Determinante Transpor Elemento Coluna Linha Autovalores
APL m ← escurece⍴x11 x12 ... -. × m ⍉m m [i; j] ou ij⌷m m [; j] ou j⌷ [2] m ou j⌷⍤1⊢m ou j⌷⍉m m [i;] ou i⌷m ⌹⍠1⊢m
Fortran m = RESHAPE ([x11, x12, ...], SHAPE (m)) TRANSPOSE (m) m (i, j) m (:, j) mi,:)
CH m = {... } determinante (m) transpor (m) m [i-1] [j-1] forma (m, 0) forma (m, 1) eigen (saída, m, NULL)
Linguagem Mathematica /
Wolfram
m = {{x11, x12, ...}, ... } Det [m] Transpor [m] m [[i, j]] m [[;;, j]] mi]] Valores próprios [m]
MATLAB /
GNU Octave
m = [...] det (m) m. ' m (i, j) m (:, j) mi,:) eig (m)
NumPy m = tapete (...) linalg.det (m) mT m [i-1, j-1] m [:, j-1] m [i-1 ,:] linalg.eigvals (m)
Gíria m = remodelar ([x11, x12, ...], [new-dims]) m = transpor (m) m [i, j] m [*, j] m [j, *]
SymPy m = Matriz (...) mT m [i-1, j-1]

Referências