Dには、ハッシュテーブルとも呼ばれる連想配列が組み込まれています。
これらは、Javaの
Map
またはC ++の
std::unordered_map
に似ています。
連想配列宣言
連想配列を宣言するには、次の構文を使用します。
// . .: value — , key — value[key] myAssociativeArray;
連想配列にアイテムを挿入する
連想配列に要素を挿入するには、
[]
演算子を使用します。
以下は、0から10までの整数の2乗の連想配列を作成し、画面に表示する例です。
import std.stdio; void main() { int[int] squares; // for (int i = 0; i <= 10; ++i) squares[i] = i * i; // writeln(squares); }
例を実行すると、次の出力が得られます。
[0:0, 6:36, 7:49, 2:4, 3:9, 10:100, 1:1, 8:64, 5:25, 4:16, 9:81]
数値はソートされないことに注意してください-これは予想されることです。連想配列は内部的にソートされません。
注 :
- 既存のキーを再マッピングすると、値が置き換えられます。
- 存在しないキーにアクセスしようとすると、
core.exception.RangeError
エラーが発生します。
連想配列からアイテムを削除する
連想配列から要素を削除するには、
remove()
関数を使用します。
aa.remove("hello");
キーの存在チェック
キーを確認するには、値へのポインターを返す
in
演算子を使用します。 キーが存在しない場合、ポインターは
null
になり
null
。
int[int] squares; // ... int* p = 10 in squares; // . .: null , is if (p !is null) writeln(*p); else writeln(" .");
連想配列のクリーニング
連想配列をクリアするには、2つの方法があります。
- キーを調べて削除します
- 古い配列を削除して新しい配列を作成します
方法1:キーを削除する
foreach (key; aa.keys) aa.remove(key);
方法2:新しい配列を作成する
既存の配列を破棄するには、それを
null
に設定し
null
。
aa = null; // aa[1] = 1; //
プロパティ
remove()
や
keys
などの連想配列のいくつかのプロパティに既に精通してい
keys
。 残りは次のとおりです。
物件 | 説明 |
---|---|
.sizeof
| 連想配列への参照のサイズを返します。 32ビットビルドでは4、64ビットビルドでは8です。 |
.length
| 配列内の値の数を返します。 動的配列とは異なり、このプロパティは読み取り専用です。 |
.dup
| 同じサイズの連想配列を作成し、最初の配列の内容をそこにコピーします。 |
.keys
| 元の連想配列のキーを要素とする動的配列を返します。 |
.values
| 元の連想配列の値を要素とする動的配列を返します。 |
.rehash
| 配列を適切に再編成し、検索を最適化します。 rehash
は、たとえば、シンボルテーブルがプログラムにロードされ、後で検索する必要がある場合に便利です。 再編成された配列への参照を返します。 |
.byKey()
| 連想配列のキーのforeach
使用して、列挙に適した範囲を返します。 |
.byValue()
| 連想配列の値のforeach
を反復処理するのに適した範囲を返します。 |
.byKeyValue()
| 連想配列のキーと値のペアのforeach
を使用して、列挙に適した範囲を返します。 返されるペアは、 .key
プロパティと .value
プロパティを持つ不透明型として表され、それぞれペアのキーと値にアクセスできます。 |
.get(Key key, lazy Value defVal)
| キーkey
検索します。 存在する場合、それに対応する値を返します。 存在しない場合は、デフォルト defVal
処理して返します。 |
他に読むもの
詳細については(たとえば、連想配列内のクラスと構造の操作について学ぶため)、 dlang.orgの公式ドキュメントを参照してください。