このドキュメントで説明するソフトウェアは、Extended SupportまたはSustaining Supportのいずれかにあります。 詳細は、https://www.oracle.com/us/support/library/enterprise-linux-support-policies-069172.pdfを参照してください。
Oracleでは、このドキュメントに記載されているソフトウェアをできるだけ早くアップグレードすることをお薦めします。

機械翻訳について

11.6.5 スカラー配列および連想配列

D言語では、概念と構文においてCの配列に直接対応するスカラー配列がサポートされます。 スカラー配列は、連続したメモリーの場所の固定長のグループであり、それぞれが同じ型の値を格納します。 スカラー配列にアクセスするには、0 (ゼロ)から始まる整数を使用して各場所を参照します。 Dプログラムでは、通常、スカラー配列を使用して、オペレーティング・システム内の配列データにアクセスします。

たとえば、5つの整数のスカラー配列saを宣言するには、次の文を使用します。

int sa[5];

Cと同様に、sa[0]は1番目の配列要素を、sa[1]は2番目を示し、5番目の要素のsa[4]まで続きます。

D言語では、連想配列と呼ばれる特別な種類の変数もサポートされます。 連想配列は、キーのセットが値のセットと関連付けられるスカラー配列と似ていますが、連想配列では、キーは一定の範囲の整数に限定されません。 D言語では、任意の型を持つ1つ以上の値のリストによって連想配列に索引を設定できます。 個々のキー値は組み合されて、配列に対する索引を設定し、そのキーに対応する値にアクセスして変更するために使用されるタプルを構成します。 各タプル・キーは、長さが同じで、同じ順序の同じキー・タイプである必要があります。 また、連想配列の各要素に関連付けられる値は、配列全体で単一の固定型になります。

たとえば、次の文では、値の型がintで、タプル・シグネチャがstring, intである新しい連想配列aaを定義し、その配列に整数値の828を格納しています。

aa["foo", 271] = 828;

配列を一度定義すれば、他の変数と同じ方法でその要素にアクセスできます。 たとえば、次の文では、値を828から829に増分することで、前にaに格納した配列要素を変更しています。

a["foo", 271]++;

次のように、同じタプル・シグネチャを持つ異なるタプルを指定して、配列に追加の要素を定義できます。

aa["bar", 314] = 159;
aa["foo", 577] = 216;

配列要素のaa["foo", 271]aa["foo", 577]は、タプルの値で第2キーの値が異なっているため、それぞれ別個のものです。

構文上、スカラー配列と連想配列は、よく似ています。 次のように、整数によって参照される整数の連想配列を宣言できます。

int ai[int];

この配列の要素は、ai[0]などの表現を使用して参照できます。 ただし、格納や実装の観点からすると、2種類の配列は非常に異なっています。 スカラー配列のsaは、0 (ゼロ)からの番号が付けられた連続するメモリーの5つの場所で構成され、索引は配列に割り当てられた記憶域でのオフセットを示します。 aiなどの連想配列には、事前定義されたサイズがなく、要素は連続するメモリーの場所に格納されません。 また、連想配列のキーには、対応する値の格納場所との関係がありません。 連想配列の要素a[0]およびa[-5]にアクセスすると、DTraceによって、2ワードの記憶域(これはメモリー内で必ずしも連続している必要はありません)のみが割り当てられます。 連想配列に索引を設定するために使用されるタプル・キーは、対応する値の抽象名であり、メモリー内の値の場所とは無関係です。

初期割当てを使用して配列を作成し、a[0] = 2;のように配列索引として単一の整数表現を使用すると、Dコンパイラでは、aがスカラー配列に対する割当てとして解釈可能な場合でも、常に新しい連想配列が作成されます。 スカラー配列を使用する場合は、明示的にその型とサイズを宣言する必要があります。