[翻訳] D言語の連想配列

これは、2016年1月1日に発行された記事「連想配列」の翻訳です。 私の趣味としては、この記事はやや表面的なものであり、多くの詳細は含まれていませんが、他のプログラミング言語の連想配列に精通している人にとっては有用です



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]





数値はソートされないことに注意してください-これは予想されることです。連想配列は内部的にソートされません。







連想配列からアイテムを削除する



連想配列から要素を削除するには、 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. キーを調べて削除します
  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の公式ドキュメントを参照してください。



All Articles