[C#] DictionaryとListで複数Key、Valueのテーブルを作る

Dictionaryクラスを使用するとハッシュテーブルを簡単に作成可能です。ハッシュテーブルとはKeyとValueが1対1のテーブル。

   Dictionary strTable = new Dictionary();
   // テーブルへ要素追加
   strTable.Add("猫", "きなこ");
   strTable.Add("犬", "チャッピー");
   strTable.Add("トラ", "タイガー");
   // テーブル内容表示
   foreach (KeyValuePair table in strTable) {
      Console.WriteLine("動物:\t" + table.Key + "\t名前: " + table.Value);
   }
動物: 猫 名前: きなこ
動物: 犬 名前: チャッピー
動物: トラ 名前: タイガー

このDictionaryクラスとListクラスを組み合わせて、KeyもValueも複数となるテーブルを実装してみました。

   Dictionary>>
   strTable = new Dictionary>>();
   // 動物
   strTable.Add("猫", new Dictionary>());
   // 種類
   strTable["猫"].Add("アメリカンショートヘア", new List());
   strTable["猫"].Add("シャム猫", new List());
   // 名前
   strTable["猫"]["アメリカンショートヘア"].Add("エリザベス");
   strTable["猫"]["アメリカンショートヘア"].Add("キャサリン");
   strTable["猫"]["シャム猫"].Add("きなこ");

   // 動物
   strTable.Add("犬", new Dictionary>());
   // 種類
   strTable["犬"].Add("コーギー", new List());
   strTable["犬"].Add("ラブラドール", new List());
   strTable["犬"].Add("柴犬", new List());
   // 名前
   strTable["犬"]["コーギー"].Add("チャッピー");
   strTable["犬"]["柴犬"].Add("まめ");
   strTable["犬"]["柴犬"].Add("こたろう");
   // テーブル内容出力
   foreach (KeyValuePair>> animal in strTable) {
      foreach (KeyValuePair> type in strTable[animal.Key]) {
         foreach (string name in strTable[animal.Key][type.Key]) {
            Console.WriteLine("動物:\t" + animal.Key + "\t種類:\t" + type.Key + "\t名前:\t" + name);
         }
      }
   }
動物:   猫      種類:   アメリカンショートヘア  名前:   エリザベス
動物:   猫      種類:   アメリカンショートヘア  名前:   キャサリン
動物:   猫      種類:   シャム猫        名前:   きなこ
動物:   犬      種類:   コーギー        名前:   チャッピー
動物:   犬      種類:   柴犬    名前:   まめ
動物:   犬      種類:   柴犬    名前:   こたろう


Keyは入れ子にしたDictionaryで、ValueはListで管理しているようなイメージでしょうか。自分が作っているアプリでは、最低でもKeyが3つ、Valueが2つ欲しかったので、このような形になっています。ちなみにラブラドールは1匹も名前がついていないので出力されていません。
この辺りを調べていると、データベースと紐づけた話題も出てきますね。確かにやりたいことは近いので、もっと便利に扱えるのかもしれません。

シェアする

  • このエントリーをはてなブックマークに追加

フォローする