D-programming-associative-arrays

提供:Dev Guides
移動先:案内検索

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

連想配列のプロパティ

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

Sr.No. Property & Description
1

.sizeof

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

2

.length

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

3

.dup

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

4

.keys

要素が連想配列のキーである動的配列を返します。

5

.values

要素が連想配列の値である動的配列を返します。

6

.rehash

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

7

.byKey()

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

8

.byValue()

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

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]