[翻訳] 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の公式ドキュメントを参照してください。

Source: https://habr.com/ru/post/J274723/


All Articles