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 |
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 (i, j) | m (:, j) | mi,:) | ||
CH | m = {... } |
determinante |
transpor |
m [i-1] [j-1] |
forma |
forma |
eigen |
Linguagem Mathematica / Wolfram |
m = {{x11, x12, ...}, ... } | Det [m] |
Transpor |
m [[i, j]] | m [[;;, j]] | mi]] |
Valores próprios |
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 |
m = transpor |
m [i, j] |
m [*, j] | m [j, *] | ||
SymPy | m = Matriz (...) | mT | m [i-1, j-1] |