ここまでは規則性のある順序でのソートを行ってきましたが、この順序をランダムにすることで配列やListをシャッフルすることが出来ます。 OrderByメソッドの場合、与えられたキーに基づいて並べ替えが行われますが、このキーにランダムな値を与えることでコレクションをシャッフルすることが出来ます。 次の例ではOrderByメソッドを使ってListをシャッフルしています。
OrderByメソッドにランダムなキーを与えてListをシャッフルする
Imports System
Imports System.Collections.Generic
Imports System.Linq
Class Sample
Shared rand As Random = New Random()
Shared Function RandomKeySelector(ByVal val As Integer) As Integer
' valに関係なく、ランダムなキーを返す
Return rand.Next()
End Function
Shared Sub Main()
Dim list As New List(Of Integer)(New Integer() {0, 1, 2, 3, 4, 5, 6, 7, 8, 9})
' シャッフル
For Each val As Integer In list.OrderBy(AddressOf RandomKeySelector)
Console.Write("{0}, ", val)
Next
Console.WriteLine()
End Sub
End Class
実行結果の例
9, 0, 6, 3, 4, 5, 8, 1, 7, 2,