C#リストのランダム化)の要素をシャッフルするための効率的な方法について説明します。 焦点は、広く使用されている漁師のシャッフルアルゴリズムにあります
フィッシャー - シャッフルアルゴリズム:のための簡潔な拡張方法として実装されています。
ここで、クラスのインスタンスを表します。
<code class="language-csharp">public static void Shuffle<T>(this IList<T> list) { int n = list.Count; while (n > 1) { n--; int k = rng.Next(n + 1); T value = list[k]; list[k] = list[n]; list[n] = value; } }</code>乱数生成オプション
rng
Random
標準
使用例System.Random
System.Security.Cryptography
<code class="language-csharp">public static void Shuffle<T>(this IList<T> list) { using (var provider = new RNGCryptoServiceProvider()) { int n = list.Count; while (n > 1) { byte[] box = new byte[1]; do provider.GetBytes(box); while (!(box[0] < (byte)((n + 1) * (double.MaxValue / 256)))); //Ensure value within range int k = box[0] % (n + 1); T value = list[k]; list[k] = list[n]; list[n] = value; } } }</code>
RNGCryptoServiceProvider
以上がC#のリストをランダムにシャッフルするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。