r.next()) `リストをシャッフルするサートの方法は? " /> <code class=" language-csharp>var r = new Random(); var shuffled = ordered.OrderBy(x => r.Next()); </p> <p>動作原則本質的に、この方法は要素にランダムに分散され、これらの数値に基づいてソートされます。これにより、各要素が異なる位置に表示されることが保証されますが、場所は実際に生成された乱数によって決定されます。 </p>代替方法<p></p> <p>要素を直接交換するDurstenFeldバージョンのFisher-Yates Shuffleアルゴリズムを使用することをお勧めします。このような拡張機能を使用して実装できます:<strong> </strong> </p>パフォーマンスの最適化<p></p> <p>パフォーマンスをさらに最適化するために、要素をシャッフルするときにすぐに要素を返すことができ、それにより不必要な作業が削減されます:(このコードは前のコードとまったく同じで、繰り返されます)<strong> </strong> </p>重要な説明<p></p> <pre class="brush:php;toolbar:false"><code class="language-csharp">public static IEnumerable<T> Shuffle<T>(this IEnumerable<T> source, Random rng) { T[] elements = source.ToArray(); for (int i = elements.Length - 1; i >= 0; i--) { int swapIndex = rng.Next(i + 1); yield return elements[swapIndex]; elements[swapIndex] = elements[i]; } }</code>同じデジタルシーケンスを複数回生成しないようにして、適切なランダムインスタンスを使用して、スレッドセキュリティを維持する必要があります。
以上が`orderby(x => r.next())`リストをシャッフルするスマートな方法ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。