C# - Dictionary<TKey,TValue> クラスの基本的な使い方
初めに
C#のDictionaryは、キーと値のペアを格納するデータ構造です。本記事では、Dicitonary の基本的な使い方をまとめます。
Index
Dictionary
Dictionary の定義
Dictionary を使うには、名前空間に ”using System.Collections.Generic;” を追加する必要があります。下のように適宜します。
(定義の仕方)
using System.Collections.Generic; //名前空間に追加 //データ型1がTKey, データ型2がTValue Dictionary<データ型1, データ型2> 変数名 = new Dictionary<データ型1, データ型2>();
(例)
using System.Collections.Generic; public class TestClass { public static void Main() { // Dictionaryを作成する Dictionary<string, int> products = new Dictionary<string, int>(); } }
要素の初期化
new 演算子を用いて初期化します。
(要素の初期化の仕方)
//()があるパターン 変数名 = new Dictionary<データ型1, データ型2>() { {key1, value1}, {key2, value2}, ... }; //()がないパターン 変数名 = new Dictionary<データ型1, データ型2> { {key1, value1}, {key2, value2}, ... };
(例)
// 要素の初期化を使ってDictionaryを作成する Dictionary<string, int> products = new Dictionary<string, int>() { { "りんご", 100 }, { "バナナ", 80 }, { "みかん", 120 } };
要素の追加、削除、全削除
Add 関数を使うことで、要素を追加できます。また、Remove 関数を使うことで、要素を削除することができます。Clear 関数を使うと要素の全削除をすることができます。
(Add 関数、Remove 関数の使い方)
//Add 関数の使い方 変数名.Add(TKey, TValue) //Remove 関数の使い方 変数名.Remove(TKey) 変数名.Remove(TKey, TValue) //Clear 関数の使い方 変数名.Clear()
(例)
// Dictionaryを作成する Dictionary<string, int> products = new Dictionary<string, int>(); // キーと値のペアを追加する products.Add("りんご", 100); products.Add("バナナ", 80); products.Add("みかん", 120); // キーが"バナナ"の要素を削除する products.Remove("バナナ"); //要素の全削除をし、要素数を0にする products.Clear();
要素数の取得
Dictionaryの要素数を取得するには、Countプロパティを使用します。
(例)
// 要素の初期化を使ってDictionaryを作成する Dictionary<string, int> products = new Dictionary<string, int>() { { "りんご", 100 }, { "バナナ", 80 }, { "みかん", 120 } }; // Dictionaryの要素数を取得する int count = products.Count; //今回は3 // 結果を表示する Console.WriteLine($"Dictionaryの要素数は{count}です。");
Keys, Values
Keys プロパティ、Values プロパティを使うことで、Key のコレクション、Value のコレクションを取得することができます。
// 要素の初期化を使ってDictionaryを作成する Dictionary<string, int> dict = new Dictionary<string, int>() { { "りんご", 100 }, { "バナナ", 80 }, { "みかん", 120 } }; // Dictionaryのキーのコレクションを取得する ICollection<string> keys = dict.Keys; // Dictionaryの値のコレクションを取得する ICollection<int> values = dict.Values; // 結果を表示する Console.WriteLine("Dictionaryのキー:"); foreach (string key in keys) { Console.WriteLine(key); } Console.WriteLine("Dictionaryの値:"); foreach (int value in values) { Console.WriteLine(value); }
ContainsKey、ContainsValue
Dictionaryには、指定されたキーまたは値が存在するかどうかを確認するためのメソッドとして、ContainsKeyメソッドとContainsValueメソッドがあります。
//引数はkeyのデータ型, 戻り値は bool public bool ContainsKey (TKey key); //引数はvalueのデータ型, 戻り値は bool public bool ContainsValue (TValue value);
(例)
// Dictionaryを作成する Dictionary<string, int> products = new Dictionary<string, int>(); // キーと値のペアを追加する products.Add("りんご", 100); products.Add("バナナ", 80); products.Add("みかん", 120); // キーが存在するかどうかを確認する if (products.ContainsKey("バナナ")) { Console.WriteLine("バナナはDictionaryに存在します。"); } else { Console.WriteLine("バナナはDictionaryに存在しません。"); } // 値が存在するかどうかを確認する if (products.ContainsValue(80)) { Console.WriteLine("80円の商品はDictionaryに存在します。"); } else { Console.WriteLine("80円の商品はDictionaryに存在しません。"); }
Item プロパティ
Itemプロパティを使用することで、以下のようなコードで要素の値を取得・設定することができます。
// Dictionaryを作成する Dictionary<string, int> products = new Dictionary<string, int>(); // 商品名と価格を追加する products.Add("りんご", 100); products.Add("バナナ", 80); products.Add("みかん", 120); // キーを使用して、値を取得する int priceOfApple = products["りんご"]; // 100 // キーを使用して、値を設定する products["バナナ"] = 90; // キーが存在しない場合は、新しい要素が追加される products["ぶどう"] = 150;
※Key から Value を取得するには、上記のようにすればよいですが、Value から Key を取得するには、KeyValuePair を使う必要があります。
Key と Value のペアを取得する
KeyValuePair
/Dictionary<string, int> products = new Dictionary<string, int>() { { "りんご", 100 }, { "バナナ", 80 }, { "みかん", 120 } }; KeyValuePair<string, int> pair = new KeyValuePair<string, int>("りんご", 100); Console.WriteLine(pair.Key); // "りんご" が出力される Console.WriteLine(pair.Value); // 100 が出力される KeyValuePair<string, int> result = products.FirstOrDefault(x => x.Value == 80); //Vakueが80の最初の要素を返す Console.WriteLine(result.Key); // "バナナ" が出力される Console.WriteLine(result.Value); // 80 が出力される
最後に
- Dictionaryは、キーと値のペアを格納するデータ構造