web-dev-qa-db-ja.com

リストをシャッフル(ランダムに再配置)<string>

List配列を再配置する必要がありますが、その中に要素の数は不定です。

誰かが私がこれをどのように行うかの例を教えてもらえますか、ありがとう

21
brux
List<Foo> source = ...
var rnd = new Random();
var result = source.OrderBy(item => rnd.Next());

明らかに、擬似乱数ジェネレーターの代わりに実際のランダム性が必要な場合は、 ランダム の代わりに RNGCryptoServiceProvider を使用できます。

59
Darin Dimitrov

これは、List<T>をシャッフルする拡張メソッドです。

    public static void Shuffle<T>(this IList<T> list) {
        int n = list.Count;
        Random rnd = new Random();
        while (n > 1) {
            int k = (rnd.Next(0, n) % n);
            n--;
            T value = list[k];
            list[k] = list[n];
            list[n] = value;
        }
    }
20
kprobst