プログラミング言語の比較(配列)

このプログラミング言語 (配列) の比較では、さまざまなコンピュータプログラミング言語の配列データ構造または行列処理の機能を比較します

構文

配列の次元

次のリストには、次元 (最初の要素、最後の要素のインデックス、または要素内のサイズ) を決定する方法の構文例が含まれています。

言語によっては、インデックスを0から始めるものもあれば、1から始めるものもあります。そのような制限がない言語や、整数だけでなく任意の列挙型によるインデックス指定を許可する言語もあります。

言語サイズ初め最後
エイダ名前の長さ名前「ファースト名前'姓
アルゴル68UPB- LWB+1 2 UPB- 2 LWB+1など。

LWB2 LWBなど

UPB

2 UPB

APL名前
(⍴名前)[インデックス]
⎕IO(⍴名前)-~⎕IO
(⍴名前)[インデックス]-~⎕IO
AWK長さ1アソルティ
C#Visual Basic (.NET)Windows PowerShellF#名前.長さ名前.GetLowerBound(次元)名前.GetUpperBound(次元)
CFMLarrayLen(名前)名前.len()
1名前.len()
max(形状(名前))0max(shape(名前))-1
コモンリスプ(長さの名前0(1- (長さの名前))
D名前.長さ0名前.長さ-1 $-1
フォートランサイズ(名前)lbound(名前)ubound(名前)
行くlen(名前)0len(名前) - 1
ハスケルrangeSize (境界)fst (境界)snd (境界)
ISLISP(長さの名前0(1- (長さの名前))
アイコン*名前1*名前
コブラDHaxeJavaJavaScriptScala名前.長さ0名前.長さ - 1
J名前0<:@#名前
JavaScript ( ES2022 )名前.長さ0名前.at(0) [1]
名前.長さ - 1名前.at(-1) [1]
ジュリア長さ(名前)
サイズ(名前)
最初に開始します
。(軸(名前))
最後に終了します
。(軸(名前))
リンゴcount(名前)1getLast(名前)
ライブコード長さ(名前)1
-1最後
ルア名前慣例により1。任意の整数[2]名前
マセマティカ長さ[名前]1名[名前]
-1姓[名前]
MATLABGNU Octave長さ(名前)1終わり
ニム名前.len名前.low [3]名前.high
オベロンLEN(名前)0LEN(名前) - 1
オブジェクトパスカル長さ(名前)0低(名前
長さ(名前)-1高さ(名前)
Objective-CNSArray *のみ)[名前数]0[名前数] - 1
OCaml配列.長さの名前0配列.長さ- 1
パールスカラー(@名前)$[$#名前
PHPcount(名前)0count(名前) - 1
PL/Idim(名前[,dim])lbound(名前[,dim])hbound(名前[,dim])
パイソンlen(名前)0-1 len(名前) - 1
R長さ(名前)1長さ(名前)
@名前.elems0@名前.終了
長さ?名前名前/ 名(1文字
苗字
ルビー名前.サイズ0名前.first
-1名前.サイズ - 1名前.最後

さび名前.len()0名前.len() - 1
S-ラング長さ(名前)0-1長さ(名前)-1
スキーム(ベクトル長ベクトル0(- (ベクトル長ベクトル) 1)
雑談名前のサイズ1名前を最初に
名前サイズ名前
迅速名前。0名前。数 - 1
ユニコン*名前1*名前
ビジュアルベーシックUBound(名前)-LBound(名前)+1LBound(名前)UBound(名前)
ウルフラム言語長さ[名前]1名[名前]
-1姓[名前]
ゾジョUBound(名前)0UBound(名前)
XPath / XQuerycount($名前)1count($ name ) last()配列:size( name ) [4]

インデックス作成

次のリストには、配列の単一の要素にアクセスする方法の構文例が含まれています。

形式言語
name [ index ]またはname [ index 1 , index 2 ]などALGOL 58ALGOL 60ALGOL 68AWKJuliaModulaPascalObject PascalC#S-Lang [5] アイコンUnicon
name [ index ]またはname [ index 1 ; index 2 ]など、またはindex nameまたはindex 1 index 2 nameなど。
APL
名前[インデックス]ActionScriptCCFMLChCobraC++DGoHaxeJavaJavaScriptLingoLuaNimObjective-CNSArray *)、Perl[5] PHPPython[5] RRuby[5] RustSwift
$名前[インデックス]Perl[5] Windows PowerShell[5] XPath / XQuery [4]
@名前[インデックス]
name (インデックス)またはname (インデックス1 インデックス2 )など。AdaALGOL WBASICCOBOLFortranRPGGNU OctaveMATLABPL/IScalaVisual BasicVisual Basic (.NET)Xojo
$名前(インデックス)XPath / XQuery [4]
名前.(インデックス)OCaml
名前.[インデックス]F#OCaml
名前/インデックス
名前 !インデックスハスケル
$名前 ?インデックスXPath / XQuery [4]
(ベクトル参照名インデックス)スキーム
(aref名インデックスコモンリスプ
(elt名インデックスISLISP
名前[[インデックス]]マセマティカ[5] ウルフラム言語
名前:インデックス雑談
[名前objectAtIndex:インデックス]Objective-CNSArray *のみ)
インデックス{名前J
name.item(index)またはname @ index [6]エッフェル

スライス

次のリストには、配列の要素の範囲にアクセスする方法の構文例が含まれています。

次の表では:

  • first – スライスの最初の要素のインデックス
  • last – スライス内の最後の要素のインデックス
  • end – スライスの最後の要素のインデックスより1つ大きい
  • len – スライスの長さ(= 末尾 - 先頭)
  • ステップ – 各配列要素の数(デフォルトは1)
形式言語
名前[:]ALGOL 68[7] ジュリアアイコンユニコン
名前[先頭+(⍳長さ)-⎕IO]APL
名前[最初:最後:ステップ]パイソン[8] [9]
名前[:末尾]行く
名前[..]パスカルオブジェクトパスカルデルファイニム
$名前[..]Windows PowerShell
@名前[..]パール[10]
名前[..]
名前[...末尾]
名前[,長さ]
ルビー[9]
コピー/部分スキップ名の最初の長さ
名前..エイダ[7]
名前Fortran[7] [8] GNU OctaveMATLAB [7] [10]
名前[[;;;;ステップ]]マセマティカ[7] [8] [9] ウルフラム言語
名前[[:]]S-ラング[7] [8] [10]
名前.[最初..ステップ..最後]F#
名前.スライス(最初最後)HaxeJavaScriptScala
名前.スライス( first , len )CFML
array_slice(名前,先頭,長さ)PHP [9]
(サブシーケンス名 最初 最後)コモンリスプ
(サブシーケンス名 最初 最後)ISLISP
Array.sub名前 最初の長さOCaml
[名前サブ配列WithRange:NSMakeRange( first , len )]Objective-CNSArray *のみ)
(最初([+i.@(-~)終わり){名前J
名前[..<末尾]
名前[...]
迅速
名前のコピー元:to:姓 名前の
コピー元:カウント:長さ
雑談
名前[..末尾]DC# [11] [12]
名前[..末尾]
名前[..=]
さび
名前[:末尾]コブラ
table.move(name, first, last, 1, {})ルア[13]

アレイシステム相互参照リスト

言語デフォルトの
ベースインデックス
指定可能な
インデックスタイプ[14]
指定可能な
ベースインデックス
バウンドチェック多次元動的サイズベクトル化された演算
エイダインデックス型[15]はいはいチェック済みはい初期化[16]いくつかは定義可能[17]
アルゴル681いいえ[18]はい様々はいはいユーザー定義可能
APL1?0または1 [19]チェック済みはいはいはい
AWK1はい、暗黙的にいいえチェックなしはい、区切られた文字列としてはい、焼き直しですいいえ
ベーシック0?いいえチェック済みいいえ初期化[16]?
C0いいえいいえ[20]チェックなし部分的に初期化、[16] [21]ヒープ[22]いいえ
0いいえいいえチェック済みはい、配列の配列でもあります[23]初期化、[16] [21]ヒープ[22]はい
C++ [17]0いいえいいえ[20]チェックなしはい、配列の配列でもあります[23]ヒープ[22]いいえ
C#0いいえ部分的[24]チェック済みはいヒープ[22] [25]はい(LINQ選択)
CFML1いいえいいえチェック済みはい、配列の配列でもあります[23]はいいいえ
コボル1いいえ[26]いいえチェック済み配列の配列[23] [27]いいえ[28]いくつかの本質的な
コブラ0いいえいいえチェック済み配列の配列[23]ヒープ?
コモンリスプ0?いいえチェック済み[29]はいはいはい(マップまたはマップイン)
D0はい[30]いいえ様々である[31]はいはい?
F#0いいえ部分的[24]チェック済みはいヒープ[22] [25]はい(地図)
フリーベーシック0いいえはいチェック済みはいイニシエータ[16]イニシエータ[32]?
フォートラン1はいはい様々である[33]はいはいはい
フォックスプロ1?いいえチェック済みはいはい?
行く0いいえいいえチェック済み配列の配列[23]いいえ[34]いいえ
ハック0はいはいチェック済みはいはいはい
ハスケル0はい[35]はいチェック済みはい、配列の配列でもあります[23]初期化[16]?
IDL0?いいえチェック済みはいはいはい
ISLISP0?いいえチェック済みはい初期化[16]はい(マップまたはマップイン)
J0?いいえチェック済みはいはいはい
ジャワ語[17]0いいえいいえチェック済み配列の配列[23]初期化[16]?
JavaScript0いいえいいえチェック済み[36]配列の配列[23]はいはい
ジュリア1はいはいチェック済み(ローカルではスキップ可能、またはユーザーによってグローバルにスキップ可能)はい、配列の配列でもありますはいはい
リンゴ1??チェックなしはいはいはい
ルア1?部分的[37]チェック済み配列の配列[23]はい?
マセマティカ1いいえいいえチェック済みはいはいはい
MATLAB1?いいえチェック済みはい[38]はいはい
ニム0はい[3]はいオプション[39]配列の配列[23]はいはい[40]
オベロン0?いいえチェック済みはいいいえ?
オベロン20?いいえチェック済みはいはい?
Objective-C [17]0いいえいいえチェック済み配列の配列[23]はいいいえ
OCaml0いいえいいえデフォルトでチェックされています配列の配列[23]初期化[16]?
パスカルオブジェクトパスカルインデックス型[15]はいはい様々である[41]はい様々である[42]いくつかの
パール0いいえはい ($[チェック済み[36]配列の配列[23]はいいいえ[43]
0いいえいいえチェック済み[36]はいはいはい
PHP0はい[44]はい[44]チェック済み[44]はいはいはい
PL/I1はいはいオプションはいいいえはい[45]
パイソン0いいえいいえチェック済み配列の配列[23]はいいいえ[46]
ロールプレイング1いいえいいえ?いいえいいえ?
R1?いいえチェックなしはい、配列の配列でもありますはいはい
指輪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]はい?
Visual Basic(クラシック)0、1、またはインデックス型[48]いいえはいチェック済みはいはい?
ビジュアルベーシック(.NET)0またはインデックス型[48]いいえ部分的[24]チェック済みはいはいはい(LINQ選択)
ウルフラム言語1いいえいいえチェック済みはいはいはい
Windows PowerShell0いいえいいえチェック済みはいヒープ?
ゾジョ0いいえいいえチェック済みはいはいいいえ
XPath / XQuery1いいえいいえチェック済み配列の配列[4] [23]はいはい

ベクトル化された配列演算

AdaFortranなどのコンパイル言語や、 IDLMATLABS-Langなどのスクリプト言語では、配列のベクトル化演算がネイティブにサポートされています。例えば、2つの配列abの要素ごとに合計して3つ目の配列cを生成するには、次のように記述するだけで済みます。

c = a + b

これらの言語は、ベクトル化された算術演算や関係演算のサポートに加えて、正弦関数などの一般的な数学関数もベクトル化します。例えば、xが配列の場合、

y = sin (x)

配列xの対応する要素の正弦を要素とする配列yが生成されます。

ベクトル化されたインデックス操作もサポートされています。例として、

偶数= x ( 2 :: 2 );奇数= x ( :: 2 );    

これは、 Fortranを使って配列の偶数と奇数のエントリから配列を作成する方法です。ベクトル化されたインデックスのもう一つの一般的な用途は、フィルタリング操作です。正弦波のクリッピング操作を考えてみましょう。0.5より大きい振幅を0.5に設定します。S -Langを使用すると、これは次のように実行できます。

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

数学的な行列演算

言語/
図書館
作成する行列式転置要素カラム固有値
APLmdimsx11 x12 ...-.×mmm[i;j]またはi jmm[;j]またはまたはまたはj[2]m
j1mj⌷⍉m
m[i;]またはim1m
フォートラン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)
Juliaとその標準ライブラリ
LinearAlgebra
m = [1 2; 3 4]または
m = [ 1 2 3 4 ]      
det(m)transpose(m)または

m'実数行列の場合

m[i, j]m[:, j]m[i, :]eigen(m).values
Mathematica /
Wolfram言語
{{x11, x12, ...}, ...}Det[m]Transpose[m]m[[i,j]]m[[;;,j]]m[[i]]Eigenvalues[m]
MATLAB /
GNU オクターブ
m = [...]det(m)m.'m(i,j)m(:,j)m(i,:)eig(m)
ナンパイm = mat(...)linalg.det(m)m.Tm[i-1,j-1]m[:,j-1]m[i-1,:]linalg.eigvals(m)
Rm <- 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.Tm[i-1,j-1]m.col(j-1)m.row(i-1)m.eigenvals()

参考文献

  1. ^ ab 「ECMAScript® 2025 言語仕様」。
  2. ^ 「Luaでのプログラミング:11.1」。
  3. ^ ab "Nim チュートリアル (パート I)".
  4. ^ abcde XPath/XQueryには2種類の配列があります。ネストできないシーケンス (1,2,3)と、XPath/XQuery 3.1バージョンではネストできる配列( array { 1,2,3 } または[1,2,3])です。
  5. ^ abcdefg インデックスは負の数になる場合があり、配列の末尾の前の対応する位置の数を示します。
  6. ^ 「Eiffeldoc : ARRAY」.
  7. ^ abcdef 多次元配列のスライスも同様にサポートされ、定義されます。
  8. ^ abcd 型のスライスもサポートされています。first:last:step
  9. ^ abcd lastまたはend は負の数にすることができ、配列の末尾の前の対応する位置で停止することを示します。
  10. ^ abc より一般的には、1 次元配列の場合、 PerlS-Lang ではという形式のスライスが許可されます。ここで は、脚注 2 で説明したような範囲、または明示的なインデックスのリスト (例: ' ')、あるいはその両方の組み合わせ (例: ) ですarray[indices]indices[0,9,3,4]A[[[0:3]],7,9,[11:2:-3]]]
  11. ^ C# 8.0 提案機能(2019年8月29日現在
  12. ^ 「Ranges - C# 8.0 言語提案」。Microsoft Docs . Microsoft . 2019年8月29日閲覧
  13. ^ 「Lua 5.3リファレンスマニュアル」www.lua.org . 2022年4月2日閲覧
  14. ^ インデックス型は、整数型列挙型文字型から自由に選択できます。非コンパクトインデックス型の配列については、連想配列を参照してください。
  15. ^ ab デフォルトのベースインデックスは、使用されるインデックスタイプの最小値です
  16. ^ abcdefghijk サイズは初期化時にのみ選択でき、その後は固定されます。
  17. ^ abcde このリストは言語機能を厳密に比較したものです。あらゆる言語(アセンブリ言語も含む)において、アドオンライブラリを介して配列処理を改善することが可能であり、この言語は標準ライブラリの一部として配列処理を改善しています。
  18. ^ ALGOL 68配列はINT型で添字付け(およびスライス)する必要があります。ただし、ハッシュ関数を使用して他の型をINT型に変換することができます。例: name [ hash("string") ]
  19. ^ インデックスの基数は、システム変数⎕IOに従って0または1にすることができます。この値は「ワークスペース」全体に適用することも、バリアント演算子( ⍠ )を使用してユーザー定義関数または単一のプリミティブ関数にローカライズすることもできます
  20. ^ ab C ではインデックスの境界チェックが行われないため、負のインデックスまたは任意の整数インデックス起点に対応する擬似配列として象徴的に機能する、任意の配列の内部へのポインタを定義できます。
  21. ^ ab C99では可変長配列が許容されているが、この新機能をサポートするコンパイラはほとんど存在しない。
  22. ^ abcde サイズは、メモリがスタック上に割り当てられる場合とは異なり、ヒープ上に割り当てられる初期化時にのみ選択できます。配列を常にヒープ上に割り当てる言語では、この注意は不要です。
  23. ^ abcdefghijklmnopqrstu vwx 配列の配列を許可し、多次元配列のほとんどの(ただしすべてではない)側面をエミュレートするために使用できます
  24. ^ abc System.Array.CreateInstance ( System.Array を返す)で初期化する場合は基数を変更できますが、言語構文を使用する場合は変更できません。0以外の基数インデックスを持つ配列は、0の基数インデックスを持つ配列と同じ型ではないため、言語構文を使用して操作することはできません(代わりにGetValueメソッドとSetValueメソッドを使用する必要があります)。また、特定の型(C#ではT[]、 VB.NETではT())にダウンキャストして、基数インデックスが0であると想定したコードの破損を防ぐことはできません。
  25. ^ ab 「安全でない」コードで固定サイズの配列を作成できるようにし、他の言語との相互運用性を高めます。
  26. ^ COBOL配列は整数型とは異なる「INDEX」型でインデックス付けできる。
  27. ^ COBOLには配列の配列しかありませんが、配列要素には多次元配列のような構文でアクセスすることができ、言語は参照されている項目を囲む配列のインデックスを自動的に一致させます。
  28. ^ COBOLでは、配列の使用可能なサイズを可変に指定する方法が提供されていますが、宣言された最大サイズ(割り当てられたサイズでもある)を超えることはできません。
  29. ^ Common Lispの実装のほとんどでは、チェックを選択的に無効にすることができます。
  30. ^ 連想配列 - Dプログラミング言語
  31. ^ ab コンパイラスイッチによって動作を調整できます。DMD 1.0と同様に、効率化のため、デバッグモードでは境界チェックが行われ、リリースモードではチェックされません。
  32. ^ FreeBASICは可変長配列と固定長配列の両方をサポートしています。インデックス範囲を指定せずに宣言された配列は可変長配列として作成され、範囲を宣言した配列は固定長配列として作成されます。
  33. ^ ほぼすべてのFortran実装では、コンパイラスイッチを介して境界チェックオプションが提供されています。ただし、デフォルトでは、効率性の観点から境界チェックは通常無効になっています。
  34. ^ Golang の配列型は動的にサイズが変更されませんが、データ型 Slice は動的にサイズが変更され、配列よりもはるかに一般的に使用されます。
  35. ^ Haskellの配列(Data.Array)では、Ixのインスタンスである任意の型をインデックス型として使用できます。したがって、Ixのインスタンスである限り、カスタム型を定義してインデックス型として使用できます。また、Ix型のタプルもIx型です。これは多次元配列の実装によく使用されます。
  36. ^ abcd これらの言語では、配列の長さ以上のインデックスにアクセスしたり書き込んだりすることができ、配列は暗黙的にそのサイズまで拡張されます。一見すると、境界がチェックされていないように見えるかもしれませんが、実際には境界は配列の拡張を決定する際にチェックされており、C言語のような安全でないメモリアクセスは発生しません。
  37. ^ ab ベースインデックスを指定することで、任意のベースに配列を作成できます。ただし、デフォルトでは、Luaの長さ演算子は配列の長さを計算する際にベースインデックスを考慮しません。この動作はメタメソッドによって変更できます。
  38. ^ 少なくとも 2 次元 (スカラー数は 1×1 配列、ベクトルは 1×n または n×1 配列)。
  39. ^ 「Nim コンパイラ ユーザー ガイド」。
  40. ^ 「ベクトル化 - Nim での R スタイルの論理ベクトル演算」。
  41. ^ 多くの実装( Turbo Pascal Object Pascal Delphi)、 Free Pascal)では、コンパイラスイッチやインラインディレクティブによって動作を変更できる。
  42. ^ 実装によって異なります。新しい実装( Free Pascal Object Pascal Delphi))では、ヒープベースの動的配列が許可されています。
  43. ^ 標準のPerl配列データ型は、ここで定義されているようなベクトル化演算をサポートしていません。ただし、 Perlデータ言語拡張機能により、この機能を備えた配列オブジェクトが追加されます。
  44. ^ abc PHPの「配列」は連想配列です。キー(インデックス)には整数と文字列を使用できます。浮動小数点数もキーとして使用できますが、整数に切り捨てられます。「ベースインデックス」や「境界」は実際には存在しません。
  45. ^ サイズは配列の宣言時または割り当て時に選択でき、割り当て後は固定されます。
  46. ^ 標準のPython配列型は、listここで定義されているようなベクトル化演算をサポートしていません。しかし、 numpy拡張機能は、この機能を備えた配列オブジェクトを追加します。
  47. ^ Arrayクラスは固定サイズですが、OrderedCollectionは動的です
  48. ^ ab Microsoft QBASIC、QuickBASIC 、Visual Basic、VBA はすべてOption Base 1を指定する機能を持っていました/持っています。これにより、モジュール内のすべての配列のデフォルトが 0 ではなく 1 から始まるようになります。Option BaseのサポートはVisual Basic (.NET)で段階的に廃止されました。Microsoft BASIC のさまざまな実装では、配列の DIMension を使用して最小および最大のインデックス値を指定できます (例: DIM MyArray (2 to 50) AS STRING では、最初のインデックスがデフォルトではなく 2 になります)。
  49. ^ Ch 数値特徴
Retrieved from "https://en.wikipedia.org/w/index.php?title=Comparison_of_programming_languages_(array)&oldid=1281233193"