OrderByメソッドを使った具体的な例として、Dictionaryのソートを行う例について見てみます。
次の例のメソッドKeySelectorはキーの選択を行うメソッドです。 Dictionaryの場合は個々の要素がKeyValuePairとして格納されているため、KeyValuePairの何をキーとするかを定める必要があります。 Dictionaryをキーでソートするためには、KeyValuePair.Keyプロパティを並べ替えの際のキーとするようにします。 KeySelectorメソッドでは、このようなキー選択の動作を定義しています。 OrderByメソッドの引数にKeySelectorメソッドを渡すことにより、その定義にしたがってソートが行われます。
OrderByメソッドを使ってDictionaryをソートする
using System;
using System.Collections.Generic;
using System.Linq;
class Sample {
static string KeySelector(KeyValuePair<string, int> pair)
{
// 並べ替えの際のキーにKeyの値を使用する
return pair.Key;
}
static void Main()
{
// ソート対象のDictionary<string, int>
var dict = new Dictionary<string, int>();
dict.Add("Bob", 3);
dict.Add("Dave", 1);
dict.Add("Alice", 2);
dict.Add("Charlie", 5);
dict.Add("Eve", 4);
// ソート
IOrderedEnumerable<KeyValuePair<string, int>> sorted = dict.OrderBy(KeySelector);
foreach (var pair in sorted) {
Console.WriteLine("{0} {1}", pair.Key, pair.Value);
}
}
}
実行結果
Alice 2 Bob 3 Charlie 5 Dave 1 Eve 4
上記の例ではDictionaryをキーにしたがってソートするためにKeyValuePair.Keyをキーとしていました。 一方、Dictionaryを値にしたがってソートしたい場合は、次のようにKeyValuePair.ValueをキーとするようにKeySelectorを変えるだけで出来ます(キーの型に合わせてメソッドの戻り値を変えている点に注意してください)。