.NET 8から追加された、RandomのShuffleメソッドを使うことで、配列をランダムに並び替えることができます。
公式リファレンスは次のページです。
使い方はこんな感じです。
var array = Enumerable.Range(1, 10).ToArray();
Random.Shared.Shuffle(array);
Console.WriteLine(string.Join(",", array));
新たに並び替えた配列を作るのでなく、Shuffleメソッドの引数に渡した配列を並び替えることに注意してください。
- このメソッドのオーダーはO(n)です
- 内部で、Randomの Next(Int32, Int32)を使っています
- 配列だけでなく、
Span<T>
を並び替えるオーバーロードもRandomに用意されています
また、.NET 10(本投稿執筆時点ではPreview 1)で、LINQにもShuffleメソッドが追加されそうです。(注:Shuffleメソッドは、Preview 1には入っていません。)
こちらのLINQ版のShuffleメソッドは、List<T>
などIEnumerable<T>
を実装するオブジェクトで利用可能です。また、呼び出し元のIEnumerable<T>
はそのままで、新たに並び替えたIEnumerable<T>
を返します。