はじめに
本記事では C# の Dictionary について、Value から Key を取得する方法について解説します。
Dictionary は、キーと値のペアを格納するための非常に便利なデータ構造です。通常はキーから値を取得することが多いですが、本記事では値からキーを取得する方法について紹介します。
目次
Dictionary で value から key を取得する方法
まず、以下に Dictionary の一例を示します。
Dictionary<string, int> dictionary = new Dictionary<string, int>()
{
{"Apple", 1},
{"Banana", 2},
{"Cherry", 3}
};
この Dictionary では、フルーツの名前がキーで、それぞれに割り当てられた番号が値となっています。では、「2」の値を持つキーをどうやって見つけるのでしょうか。以下にそのための C# コードを示します。
string key = dictionary.FirstOrDefault(kvp => kvp.Value == 2).Key;
このコードでは、LINQ のFirstOrDefault
メソッドを使用して、値が「2」である最初のキー・値ペアを見つけ、そのキーを取得しています。
このメソッドは、条件に一致する最初の要素を返すか、一致するものがない場合はデフォルト値を返します。注意点として、Dictionary は一意のキーを持つことを前提としていますが、値は一意であるとは限らないため、同じ値を持つ複数のキーが存在する可能性があります。その場合、この方法では最初に見つかったキーのみが返されます。
サンプルコード
using System;
using System.Collections.Generic;
using System.Linq;
public class Program
{
static void Main(string[] args)
{
Dictionary<string, int> dictionary = new Dictionary<string, int>()
{
{"Apple", 1},
{"Banana", 2},
{"Cherry", 3}
};
string key = GetKeyFromValue(dictionary, 2);
Console.WriteLine(key);
// 出力
// Banana
}
static string GetKeyFromValue(Dictionary<string, int> dictionary, int value)
{
return dictionary.FirstOrDefault(kvp => kvp.Value == value).Key;
}
}
Dictionary で値が一致するすべてのキーを取得する方法
上記で紹介したのは、最初に見つかったキーのみを取得する方法ですが、LINQ のWhere
メソッドとSelect
メソッドを使用して、値に一致するすべてのキーをリストに集めることができます。
以下にそのコードを示します。
using System;
using System.Collections.Generic;
using System.Linq;
public class Program
{
static void Main(string[] args)
{
Dictionary<string, int> dictionary = new Dictionary<string, int>()
{
{"Apple", 1},
{"Banana", 2},
{"Cherry", 3},
{"Durian", 2},
{"Grape", 1}
};
List<string> keys = GetKeysFromValue(dictionary, 2);
foreach (string key in keys)
{
Console.WriteLine(key);
}
// 出力
// Banana
// Durian
}
static List<string> GetKeysFromValue(Dictionary<string, int> dictionary, int value)
{
return dictionary.Where(kvp => kvp.Value == value).Select(kvp => kvp.Key).ToList();
}
}
GetKeysFromValue
メソッドは、引数として渡された値に一致するすべてのキーを持つリストを返します。
このメソッドは、まずWhere
メソッドを使用して値が一致するすべてのキー・値ペアをフィルタリングし、次にSelect
メソッドを使用してそれらのキーを抽出し、最後にToList
メソッドを使用して結果をリストに変換します。
参考資料
Dictionary<TKey,TValue> クラス | Microsoft ドキュメント