構文
配列の次元 以下のリストには、次元(最初の要素のインデックス、最後の要素、または要素数)を決定する方法の構文例が含まれています。
言語によっては、インデックスを0から始めるものもあれば、1から始めるものもある。また、そのような制限が全くないものや、整数だけでなく任意の列挙型によるインデックス付けを許可するものもある。
インデックス作成 以下のリストには、配列の単一要素にアクセスする方法を示す構文例が含まれています。
スライス 以下のリストには、配列の要素の範囲にアクセスする方法を示す構文例が含まれています。
以下の表をご覧ください。
first – スライス内の最初の要素のインデックスlast – スライス内の最後の要素のインデックスend – スライス内の最後の要素のインデックスより1つ大きい値len – スライスの長さ(= 末尾 - 先頭)ステップ – 各ステップ内の配列要素の数(デフォルトは1)
ベクトル化された配列演算 Ada やFortran などのコンパイル言語、およびIDL 、MATLAB 、S-Lang などのスクリプト言語の一部は、配列に対するベクトル演算をネイティブにサポートしています。たとえば、2つの配列a とb の要素ごとの合計を実行して3つ目の配列c を生成するには、次のように記述するだけで済みます。
c = a + b ベクトル化された算術演算と関係演算のサポートに加えて、これらの言語はサインなどの一般的な数学関数もベクトル化します。たとえば、x が配列の場合、
y = sin (x) 結果として、配列x の対応する要素の正弦となる要素を持つ配列y が生成されます。
ベクトル化されたインデックス操作もサポートされています。例として、
even = x ( 2 :: 2 ); odd = x ( :: 2 ); これは、 Fortran を 使用して配列の偶数要素と奇数要素から配列を作成する方法です。ベクトル化されたインデックスのもう 1 つの一般的な使用法は、フィルタリング操作です。振幅が 0.5 より大きい値を 0.5 に設定する正弦波のクリッピング操作を考えてみましょう。S -Lang を使用すると、これは次のように実行できます。
y = sin(x); y[where(abs(y)>0.5)] = 0.5;
参考文献 1 2 「ECMAScript® 2025 言語仕様」 。 ↑ 「Lua でのプログラミング : 11.1」 。 1 2 「ニムチュートリアル(パートI)」 。 1 2 3 4 5 XPath/XQuery には 2 種類の配列があります。ネストできないシーケンス (1,2,3) と、XPath/XQuery 3.1 バージョンでネストできる配列 array { 1,2,3 } または[1,2,3]です。 1 2 3 4 5 6 7 インデックスは負の数になる場合があり、配列の末尾より前の対応する位置数を示します。 ↑ "Eiffeldoc : ARRAY" 。 1 2 3 4 5 6 多次元配列のスライスも同様にサポートされ、定義されます。 1 2 3 4 型のスライスもサポートされています。first :last :step 1 2 3 4 last または end は 負の数になる場合があり、配列の末尾の対応する数手前で停止することを示します。 1 2 3 より一般的には、1 次元配列の場合、 Perl とS-Lang は の形式のスライスを許可します。ここで、は脚注 2 で述べたような範囲、または明示的なインデックスのリスト (例: '')、または両方の組み合わせ (例: ) のいずれかです。array [indices ]indices [0,9,3,4]A[[[0:3]],7,9,[11:2:-3]]] ↑ C# 8.0 で提案された機能( 2019年 8月29日現在) ↑ 「範囲- C# 8.0 言語提案」 。Microsoft Docs。Microsoft。2019 年 8 月 29 日 取得 。 ↑ 「Lua 5.3 リファレンス マニュアル」 。www.lua.org 。 2022年4月2日 取得 。 ↑ インデックス型は、自由に選択できる整数型 、列挙型 、または文字型 にすることができます。非コンパクトインデックス型を持つ配列については、「連想配列」を参照してください。 1 2 デフォルトのベースインデックスは、使用されているインデックスタイプの最小値です。 1 2 3 4 5 6 7 8 9 10 11 サイズは初期化時にのみ選択でき、その後は固定されます。 1 2 3 4 5 このリストは言語機能のみを比較しています。すべての言語(アセンブリ言語 を含む)では、アドオンライブラリを介して配列処理を改善することが可能です。この言語は、標準ライブラリの一部として配列処理の改善機能を備えています。 ↑ ALGOL 68 配列はINT 型で添え字を付け(およびスライスする)必要があります。ただし、ハッシュ関数を使用して他の型をINT 型 に変換することもできます。例: name [ hash("string") ] ↑ インデックスのベースは、システム変数⎕IO に従って 0 または 1 になります。この値は「ワークスペース」全体に適用することも、バリアント演算子 ( ⍠ )を使用してユーザー定義関数または単一のプリミティブ関数に限定することもできます。 1 2 C言語はインデックスの境界チェックを行わないため、負のインデックスや任意の整数インデックスの開始位置に対応する擬似配列としてシンボル的に機能する、任意の配列の内部へのポインタを定義できます。 1 2 C99では可変サイズの配列が認められていますが、この新機能をサポートするコンパイラはほとんどありません。 1 2 3 4 5 サイズは、メモリがスタックに割り当てられる場合とは異なり、ヒープに割り当てられる場合にのみ初期化時に選択できます。常に配列をヒープに割り当てる言語では、この注意書きは不要です。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23配列の配列を許可し、多次元配列のほとんどの側面(すべてではない) を エミュレートするために使用できます 。 1 2 3 System.Array.CreateInstance ( System.Array を返します を使用して初期化する場合、基底は変更できますが、言語構文を使用する場合は変更できません。基底インデックスがゼロでない配列は、基底インデックスがゼロの配列と同じ型ではないため、言語構文を使用して操作したり (代わりにGetValue メソッドとSetValue メソッドを使用する必要があります)、特定の型 ( C# ではT[] 、 VB.NET ではT() ) にダウンキャストしたりすることはできません。これにより、基底インデックスがゼロであることを前提としたコードが破損するのを防ぎます。 1 2 「安全でない」コードで固定サイズの配列を作成できるため、他の言語との相互運用性が向上します。 ↑ COBOL配列は、整数型とは異なる「INDEX」型でインデックス付けできます。 ↑ COBOLには配列の配列しかありませんが、配列要素には多次元配列のような構文でアクセスできます。この場合、言語は参照されている項目を囲む配列にインデックスを自動的に対応させます。 ↑ COBOLでは、配列の使用可能なサイズを可変に指定する方法が提供されていますが、これは宣言された最大サイズ(割り当てサイズでもある)を超えることは決してありません。 ↑ ほとんどのCommon Lisp実装では、チェックを選択的に無効にすることができます。 ↑ 連想配列 - D言語 1 2 コンパイラスイッチを使用して動作を調整できます。DMD 1.0 と同様に、デバッグモードでは境界がチェックされ、リリースモードでは効率化のためにチェックされません。 ↑ FreeBASICは、可変長配列と固定長配列の両方をサポートしています。インデックス範囲を指定せずに宣言された配列は可変長配列として作成され、範囲を指定して宣言された配列は固定長配列として作成されます。 ↑ ほぼすべてのFortran実装では、コンパイラスイッチを介して境界チェックオプションが提供されています。ただし、デフォルトでは、効率性を考慮して境界チェックは通常無効になっています。 ↑ GolangのArray型は動的にサイズが変わるわけではありませんが、 Slice 型は動的にサイズが変わるため、配列よりもはるかに一般的に使用されています。 ↑ Haskellの配列(Data.Array)では、Ixのインスタンスである任意の型をインデックス型として使用できます。したがって、Ixのインスタンスである限り、カスタム型を定義してインデックス型として使用できます。また、Ix型のタプルもIx型です。これは、多次元配列を実装する際によく使用されます。 1 2 3 4 これらの言語では、配列の長さ以上の配列インデックスにアクセスしたり書き込んだりすることができ、配列はそのサイズまで暗黙的に拡張されます。これは、境界がチェックされていないように見えるかもしれませんが、実際には境界がチェックされて配列を拡張するかどうかが決定され、C 言語のように安全でないメモリ アクセスは発生しません。 ↑ ベースインデックスを指定することで、任意のベースに配列を作成できます。ただし、デフォルトでは、Lua の長さ演算子は配列の長さを計算する際にベースインデックスを考慮しません。この動作はメタメソッドを使用して変更できます。 ↑ 少なくとも2次元(スカラー値は1×1配列、ベクトルは1×nまたはn×1配列)。 ↑ 「Nimコンパイラユーザーガイド」 。 ↑ 「ベクトル化 - Nim における R スタイルの論理ベクトル演算」 。 ↑ 多くの実装( Turbo Pascal 、 Object Pascal ( Delphi )、 Free Pascal )では、コンパイラスイッチやインラインディレクティブによって動作を変更できます。 ↑ 実装によって異なります。新しい実装( Free Pascal 、 Object Pascal ( Delphi ))では、ヒープベースの動的配列が使用できます。 ↑ 標準のPerl 配列データ型は、ここで定義されているようなベクトル化演算をサポートしていません。ただし、 Perl データ言語 拡張機能は、この機能を持つ配列オブジェクトを追加します。 1 2 3 PHP の「配列」は連想配列です。キー (インデックス) として整数と文字列を使用できます。浮動小数点数もキーとして使用できますが、整数に切り捨てられます。「ベース インデックス」や「境界」は実際にはありません。 ↑ サイズは配列の宣言時、または割り当て時に選択できます。割り当て後はサイズが固定されます。 ↑ 標準のPython 配列型はlist、ここで定義されているようなベクトル化演算をサポートしていません。しかし、 numpy 拡張機能は、この機能を持つ配列オブジェクトを追加します。 ↑ Arrayクラスは固定サイズですが、OrderedCollectionクラスは動的です 1 2 Microsoft QBASIC、 QuickBASIC 、Visual Basic、およびVBAはすべて、 Option Base 1 を指定する機能を持っていました/持っています。これにより、モジュール内のすべての配列がデフォルトで0ではなく1から開始するようになりました。Option Baseのサポートは Visual Basic (.NET) で段階的に廃止されました、最小および最大インデックス値を指定するためにを 使用してDIMensionできます(たとえば、 DIM MyArray(2 to 50) AS STRING では、最初のインデックスがデフォルトではなく2になります)。 ↑ Ch 数値的特徴