English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Dictionary<TKey, TValue>は泛型コレクションであり、特定の順序でキー値のペアを保存します。
Dictionary<TKey, TValue>はキー値のペアを保存します。
System.Collection.Generic命名空間に属しています。
IDictionary<TKey, TValue>インターフェースを実装
キーはユニークでなければなりません。nullではありません。
値はnullまたは重複することができます。
インデックスを使用して関連するキーを渡すことで値にアクセスできます、例えばmyDictionary[key]
要素はKeyValuePair<TKey, TValue>オブジェクトとして保存されます。
Dictionary<TKey, TValue>オブジェクトを渡すことで、それが保存できるキーや値のタイプを作成できます。以下の例では、辞書の作成とキー値のペアの追加方法を示します。
IDictionary<int, string> numberNames = new Dictionary<int, string>(); numberNames.Add(1,"One"); //Add()メソッドを使用してキーを追加/値 numberNames.Add(2,"Two"); numberNames.Add(3,"Three"); //以下はランタイムエラーを引き起こします:key already added.。 //numberNames.Add(3, "Three"); foreach(KeyValuePair<int, string> kvp in numberNames) Console.WriteLine("キー: {0}, 値: {1} //コレクションを使用-初期化子構文で辞書を生成 var cities = new Dictionary<string, string>(){ {"UK", "ロンドン, マンチェスター, ブラッドフォード"}, {"USA", "シカゴ, ニューヨーク, ウエストバージニア"}, {"インド", "ムンバイ, ニューデリー, プネー"} } foreach(var kvp in cities) Console.WriteLine("キー: {0}, 値: {1}
上記の例では、numberNamesはDictionary<int, string>型の辞書であり、したがってintのキーと文字列の値を保存できます。同様に、citiesはDictionary<string, string>型の辞書であり、したがって文字列のキーと文字列の値を保存できます。辞書には重複のキーやnullのキーを含むことができませんが、値には重複のキーやnullのキーを含むことができます。キーはユニークでなければなりません。そうでないとランタイムエラーが発生します。
辞書のインデックスを使用してアクセスできます。指定されたキーで関連する値を取得します。また、ElementAt()メソッドを使用して指定されたインデックスからKeyValuePairを取得することもできます。
var cities = new Dictionary<string, string>(){ {"UK", "ロンドン, マンチェスター, ブラッドフォード"}, {"USA", "シカゴ, ニューヨーク, ウエストバージニア"}, {"インド", "ムンバイ, ニューデリー, プネー"} } Console.WriteLine(cities["UK"]); //UKのキー値を表示 Console.WriteLine(cities["USA"]);//USAのキー値を表示 //Console.WriteLine(cities["フランス"]); // 実行時例外:run-time exception: Key does not exist //ContainsKey()を使用して未知のキーをチェック if(cities.ContainsKey("France")){ Console.WriteLine(cities["フランス"]); } //TryGetValue()を使用して未知のキーの値を取得 string result; if (cities.TryGetValue("フランス", out result)) { Console.WriteLine(result); } //ElementAt()を使用してインデックスでキーペアを検索 for (int i = 0; i < cities.Count; i++) { Console.WriteLine("キー: {0}, 値: {1} }
インデクサーで指定されたキーを通じてキーの値を更新します。キーが辞書に存在しない場合、KeyNotFoundExceptionが投げられますので、未知のキーにアクセスする前にContainsKey()メソッドを使用してください。
var cities = new Dictionary<string, string>(){ {"UK", "ロンドン, マンチェスター, ブラッドフォード"}, {"USA", "シカゴ, ニューヨーク, ウエストバージニア"}, {"インド", "ムンバイ, ニューデリー, プネー"} } cities["UK"] = "リバプール,ブリストル"; //UKのキーの値を更新 cities["USA"] = "ロサンゼルス,ボストン"; //USAのキーの値を更新 //cities["フランス"] = "パリ"; //ランタイムエラー:KeyNotFoundExceptionが発生しました if(cities.ContainsKey("France")){ cities["フランス"] = "パリ"; }
Remove()メソッドは辞書から現在のキーペアを削除します。Clear()メソッドは辞書からすべての要素を削除します。
var cities = new Dictionary<string, string>(){ {"UK", "ロンドン, マンチェスター, ブラッドフォード"}, {"USA", "シカゴ, ニューヨーク, ウエストバージニア"}, {"インド", "ムンバイ, ニューデリー, プネー"} } cities.Remove("UK"); // UKを削除する //cities.Remove("France"); //ランタイムエラー:KeyNotFoundExceptionが発生しました if(cities.ContainsKey("France")){ // キーを取得する前に確認してください cities.Remove("France"); } cities.Clear(); //全ての要素を削除する
以下の図は、泛型Dictionaryクラスの階層構造を示しています。
docs.microsoft.comで辞書メソッドと属性について詳しく学びます。