ホームに戻る
出典 :
C# の Dictionary<TKey, TValue> の使い方 - PG日誌 C# Dictionaryのキーに複数の値を使う - け日記
関連 :
コレクション [C++]マップ(連想配列) コレクションのソート コレクション初期化子 [C#]LINQ (Language Integrated Query) 無名関数とラムダ式
目次 :

Dictionary ( System.Collections.Generic.Dictionary )とは

.NETにおける連想配列クラス。キーと値を関連付けて、キーから値を検索できる。
C++(STL)における std::map と共通の概念。

通常の配列との比較

以下、コード例はいずれもC#。
画像
Dictionary は要素を自由に追加( Add() )、削除( Remove() )できる。

基本形(宣言・初期化・参照)

Dictionary<TKey, TValue>
TKey 、TValue ともに 任意の型を指定できる(「文字列をキーに数値を検索」など)。
コレクション初期化子を用いている。
画像

キーのみ / 値のみの集合を抽出

Dictionary のキー(Keys)、値(Values)のみを抽出できる。
// Dictionary を初期化 Dictionary <int, string> dic = new Dictionary <int, string> { { 0, "りんご" }, { 1, "みかん" }, { 2, "いちご" }, }; // キーのみ、値のみを抽出 var keys = dic.Keys; //< 戻り値は KeyCollection 型 var values = dic.Values; //< 戻り値は ValueCollection 型 // 配列化( ToArray() )可能 int[] array_keys = keys.ToArray(); string[] array_values = values.ToArray(); // List 化可能 // コンストラクタに KeyCollection / ValueCollection を渡す List<int> list_keys = new List<int>(keys); List<string> list_values = new List<string>(values);

Dictionaryの逆引き (値からキーを得る)

LINQの機能を用いる(System.Linq に依存)。First() 関数とラムダ式を用いて以下のように書ける。
(LINQラムダ式の詳細はそれぞれのリンク先を参照)
注) 値が重複している場合は、最初に見つかった要素のキーが返る。
// Dictionary を初期化 Dictionary <int, string> dic = new Dictionary <int, string> { { 0, "りんご" }, { 1, "みかん" }, { 2, "いちご" }, }; // 値 (Value) が"みかん"の要素のキー (Key) を取得 (== 1) int key = dic.First(x => x.Value == "みかん").Key;
First() 関数の代わりに All() 関数を用いると、該当する要素すべて(集合)が返る。