ルルのゲーム開発備忘録

主にUnityやC#に関する情報を気まぐれに投稿していきま~す

【C#】Listの中身をランダムに入れ替える・ランダムに一個取り出す簡単な書き方

たった1行でランダムにできる方法

LinqとGuidをつかって、リストの中身をランダムにする方法、ランダムに一個取り出す方法を紹介します。といってもランダムに一個取り出すほうは、中身をランダムにした後、先頭のものを取って来るだけなので特に説明はしません。

結論

コードは↓画像のような感じです

リストの中身をランダムに並び替え

リストの中身をランダムに並び替え

出力結果

試しに3回実行しましたが、それぞれ違う順序になっていました。


やっていること

ListをLinqのOrderByで回して、そのときの順序比較に用いる値としてGuid.NewGuid()を指定することで、それぞれ生成されたGuidをもとに昇順で入れ替えてます。

Guidについて

Guid は、グローバルに一意となる識別子のことです。Guidは値がめったに重複しないため様々な識別子として利用できます。

保証はされませんが、C#ではGuid構造体を使うことで世界中で一意の識別子を128bit(16byte)の値で生成できます。ほかのアプリや端末などの値と比較しても一致する確率が低いとされています。

 

参考

UUID - Wikipedia

webbibouroku.com

 

補足

今回はListと表記しましたがLinqが使えればできるのでIEnumerableが実装されているものなら今回のような使い方ができますね。

また単にランダムに取り出すだけなので、万が一、億が一にGuidが重複したとしても問題はないので気軽に使えそうです。