ここまでは規則性のある順序でのソートを行ってきましたが、この順序をランダムにすることで配列やListをシャッフルすることが出来ます。 OrderByメソッドの場合、与えられたキーに基づいて並べ替えが行われますが、このキーにランダムな値を与えることでコレクションをシャッフルすることが出来ます。 次の例ではOrderByメソッドを使ってListをシャッフルしています。
OrderByメソッドにランダムなキーを与えてListをシャッフルする
using System;
using System.Collections.Generic;
using System.Linq;
class Sample {
static Random rand = new Random();
static int RandomKeySelector(int val)
{
// valに関係なく、ランダムなキーを返す
return rand.Next();
}
static void Main()
{
var list = new List<int>(new int[] {0, 1, 2, 3, 4, 5, 6, 7, 8, 9});
foreach (var val in list.OrderBy(RandomKeySelector)) {
Console.Write("{0}, ", val);
}
Console.WriteLine();
}
}
実行結果の例
9, 0, 6, 3, 4, 5, 8, 1, 7, 2,