Dプログラミング-連想配列

連想配列には、必ずしも整数である必要はなく、まばらに入力できるインデックスがあります。連想配列のインデックスは、Key、およびそのタイプはと呼ばれます KeyType

連想配列は、KeyTypeを配列宣言の[]内に配置することによって宣言されます。連想配列の簡単な例を以下に示します。

import std.stdio;

void main () { 
   int[string] e;      // associative array b of ints that are  
   
   e["test"] = 3; 
   writeln(e["test"]); 
   
   string[string] f; 
   
   f["test"] = "Tuts"; 
   writeln(f["test"]); 
   
   writeln(f);  
   
   f.remove("test"); 
   writeln(f); 
}

上記のコードをコンパイルして実行すると、次の結果が得られます。

3 
Tuts 
["test":"Tuts"] 
[]

連想配列の初期化

連想配列の簡単な初期化を以下に示します。

import std.stdio;

void main () { 
   int[string] days = 
      [ "Monday" : 0, 
         "Tuesday" : 1, 
         "Wednesday" : 2, 
         "Thursday" : 3, 
         "Friday" : 4, 
         "Saturday" : 5, 
         "Sunday" : 6 ]; 
   writeln(days["Tuesday"]);    
}

上記のコードをコンパイルして実行すると、次の結果が得られます。

1

連想配列のプロパティ

連想配列のプロパティは次のとおりです-

シニア番号 プロパティと説明
1

.sizeof

連想配列への参照のサイズを返します。32ビットビルドでは4、64ビットビルドでは8です。

2

.length

連想配列の値の数を返します。動的配列とは異なり、読み取り専用です。

3

.dup

同じサイズの新しい連想配列を作成し、連想配列の内容をその中にコピーします。

4

.keys

動的配列を返します。その要素は連想配列のキーです。

5

.values

動的配列を返します。その要素は連想配列の値です。

6

.rehash

ルックアップがより効率的になるように、連想配列を所定の位置に再編成します。再ハッシュは、たとえば、プログラムがシンボルテーブルのロードを完了し、その中で高速ルックアップが必要な場合に効果的です。再編成された配列への参照を返します。

7

.byKey()

連想配列のキーを反復処理するForeachStatementへの集約として使用するのに適したデリゲートを返します。

8

.byValue()

連想配列の値を反復処理するForeachStatementへの集約として使用するのに適したデリゲートを返します。

9

.get(Key key, lazy Value defVal)

キーを検索します。存在する場合は対応する値を返し、存在しない場合はdefValを評価して返します。

10

.remove(Key key)

キーのオブジェクトを削除します。

上記のプロパティの使用例を以下に示します。

import std.stdio;

void main () { 
   int[string] array1;

   array1["test"] = 3; 
   array1["test2"] = 20; 
   
   writeln("sizeof: ",array1.sizeof); 
   writeln("length: ",array1.length); 
   writeln("dup: ",array1.dup);  
   array1.rehash; 
   
   writeln("rehashed: ",array1);  
   writeln("keys: ",array1.keys); 
   writeln("values: ",array1.values);
   
   foreach (key; array1.byKey) { 
      writeln("by key: ",key); 
   }

   foreach (value; array1.byValue) { 
      writeln("by value ",value); 
   }

   writeln("get value for key test: ",array1.get("test",10)); 
   writeln("get value for key test3: ",array1.get("test3",10));  
   array1.remove("test"); 
   writeln(array1); 
}

上記のコードをコンパイルして実行すると、次の結果が得られます。

sizeof: 8                                                                          
length: 2                                                                          
dup: ["test":3, "test2":20]                                                        
rehashed: ["test":3, "test2":20]                                                   
keys: ["test", "test2"]                                                            
values: [3, 20]                                                                    
by key: test                                                                       
by key: test2                                                                      
by value 3                                                                         
by value 20                                                                        
get value for key test: 3                                                          
get value for key test3: 10                                                        
["test2":20]