OrderByメソッドを使った具体的な例として、Dictionaryのソートを行う例について見てみます。
次の例のメソッドKeySelectorはキーの選択を行うメソッドです。 Dictionaryの場合は個々の要素がKeyValuePairとして格納されているため、KeyValuePairの何をキーとするかを定める必要があります。 Dictionaryをキーでソートするためには、KeyValuePair.Keyプロパティを並べ替えの際のキーとするようにします。 KeySelectorメソッドでは、このようなキー選択の動作を定義しています。 OrderByメソッドの引数にKeySelectorメソッドを渡すことにより、その定義にしたがってソートが行われます。
OrderByメソッドを使ってDictionaryをソートする
Imports System
Imports System.Collections.Generic
Imports System.Linq
Class Sample
Shared Function KeySelector(ByVal pair As KeyValuePair(Of String, Integer)) As String
' 並べ替えの際のキーにKeyの値を使用する
Return pair.Key
End Function
Shared Sub Main()
' ソート対象のDictionary
Dim dict As New Dictionary(Of String, Integer)()
dict.Add("Bob", 3)
dict.Add("Dave", 1)
dict.Add("Alice", 2)
dict.Add("Charlie", 5)
dict.Add("Eve", 4)
' ソート
Dim sorted As IOrderedEnumerable(Of KeyValuePair(Of String, Integer)) = dict.OrderBy(AddressOf KeySelector)
For Each pair As KeyValuePair(Of String, Integer) In sorted
Console.WriteLine("{0} {1}", pair.Key, pair.Value)
Next
End Sub
End Class
実行結果
Alice 2 Bob 3 Charlie 5 Dave 1 Eve 4
上記の例ではDictionaryをキーにしたがってソートするためにKeyValuePair.Keyをキーとしていました。 一方、Dictionaryを値にしたがってソートしたい場合は、次のようにKeyValuePair.ValueをキーとするようにKeySelectorを変えるだけで出来ます(キーの型に合わせてメソッドの戻り値を変えている点に注意してください)。