首頁 > 後端開發 > C++ > 'orderby(x => r.next())`列出列表的有效方法嗎?

'orderby(x => r.next())`列出列表的有效方法嗎?

Mary-Kate Olsen
發布: 2025-01-31 19:06:10
原創
808 人瀏覽過

Is `OrderBy(x => r.next())`一種有效的列表列表的方法嗎?
“ /></p>
<p>><strong>使用<code>OrderBy(x => r.Next())</code>用於列表改組:有效還是沒有?
</strong>有些程序員使用</p>來調整列表,但這是最好的方法嗎?讓我們檢查一下其機制和效率。 <p>
<code>OrderBy(x => r.Next())</code></p>它如何工作<p><strong>
</strong>此方法將隨機數分配給列表中的每個項目,然後根據這些隨機數對列表進行分配。  這有效地將列表隨機重新定為。 </p>>
<p> </p>性能問題<p><strong>
</strong>主要缺點是性能。  該方法具有O(n log n)的時間複雜性,使其比其他o(n)改組算法的速度明顯慢。 </p>>
<p><code>OrderBy</code>一個更好的解決方案:Fisher-Yates Shuffle <ante></p>>
<p>>更有效的替代方法是使用交換算法的Fisher-Yates Shuffle(特別是Durstenfeld的變體)。  此示例使用此方法顯示了可重複使用的方法:<strong>
</strong>
</p>此改進的版本會在隨機散裝時產生元素,優化內存使用和處理。 <p>>
<code>Shuffle</code></p><div class=

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];
    }
}
登入後複製

的重要說明>

在使用>類時,請記住這些要點:Random>

在快速演替中創建多個

實例可以導致類似的隨機數序列。 Random

類不是線程安全。
  • Random>請參閱鏈接的文章,以獲取有關使用
  • 類避免這些陷阱的最佳實踐。
  • ">

    以上是'orderby(x => r.next())`列出列表的有效方法嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門推薦
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板