ひとりでのアプリ開発 - fineの備忘録 -

ひとりでアプリ開発をするなかで起こったことや学んだことを書き溜めていきます

C# - Dictionary<TKey,TValue> クラスの基本的な使い方

初めに

 C#のDictionaryは、キーと値のペアを格納するデータ構造です。本記事では、Dicitonary の基本的な使い方をまとめます。

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 を用いて、 Key と Value のペアを表すことができます。

/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 が出力される
LINQ

 LINQ を使い、要素をソートしたり、取得したりすると便利です。
 
 LINQ については、下のリンク先をご覧ください。

fineworks-fine.hatenablog.com

最後に

  • Dictionaryは、キーと値のペアを格納するデータ構造