DictionaryでLINQを使ってみる

サンプルから学んでいきましょう

Whereメソッド

var dictionary = new Dictionary<string, int>()
{
    {"apple", 1},
    {"banana", 2},
    {"orange", 3},
    {"grape", 4}
};

var filteredDictionary = dictionary.Where(x => x.Value > 2);

foreach (var item in filteredDictionary)
{
    Console.WriteLine(item.Key + ": " + item.Value);
}

ここでは、dictionaryという名前のDictionaryを作成し、その中にいくつかのキーと値のペアを追加しました。その後、Whereメソッドを使用して、値が2より大きい要素だけを取り出し、filteredDictionaryという名前の新しいDictionaryに格納しました。最後に、foreach文を使用して、新しいDictionaryの内容を表示します。 実行すると、次のようになります

実行結果

orange: 3
grape: 4

Selectメソッド

var dictionary = new Dictionary<string, int>()
{
    {"apple", 1},
    {"banana", 2},
    {"orange", 3},
    {"grape", 4}
};

var selectedDictionary = dictionary.Select(x => new { x.Key, Value = x.Value * 2 });

foreach (var item in selectedDictionary)
{
    Console.WriteLine(item.Key + ": " + item.Value);
}

ここでは、dictionaryという名前のDictionaryを作成し、その中にいくつかのキーと値のペアを追加しました。その後、Selectメソッドを使用して、値を2倍にする新しい要素を作成し、selectedDictionaryという名前の新しいDictionaryに格納しました。最後に、foreach文を使用して、新しいDictionaryの内容を表示します。

実行結果

apple: 2
banana: 4
orange: 6
grape: 8

一つだけ注意が必要な点があります。 それはSelectメソッドは、IEnumerable<T>を返すため、新しいDictionaryを作ることはできません。 Dictionary<string,int>は、IEnumerable<KeyValuePair<string,int>>を返すため、項目のインデックスアクセスができないため、新しいDictionaryを作ることができません。

新しいDictionaryを作りたい場合、自分で新しいDictionaryを作成し、そこに要素を追加することを検討することができます。 また、ToDictionaryメソッドを使うことで、IEnumerable<T>からDictionary<TKey,TValue>に変換できます。

 var newDictionary = selectedDictionary.ToDictionary(x => x.Key, x => x.Value);

C#,LINQ,学習

Posted by hidepon