我有一個對象列表,我想在每個請求中隨機對它們進行重新排序。這樣做的最好方法是什麼?什麼是隨機重新安排在C#中的項目列表的最佳方式?
回答
怎麼樣某種Knuth-Fisher-Yates shuffle algorithm?
for (int i = cards.Length - 1; i > 0; i--)
{
int n = rand.Next(i + 1);
Swap(ref cards[i], ref cards[n]);
}
該代碼取自Coding Horror。這也是關於人們經常犯這種錯誤的推薦閱讀。
我最喜歡的洗牌方案是使用N * log N sort並將它傳遞給一個返回隨機結果的排序謂詞。它具有很好的功能,可以用最少的新代碼來完成,使用大多數語言即使在最條紋版本中也可以使用的構建塊。
您可以使用線性時間運行的Fisher-Yates shuffle算法。
產生不正確的結果 - 請參閱http://www.codinghorror.com/blog/archives/001015.html – 2009-01-06 19:57:40
@LFSR:再次閱讀文章? – Jimmy 2009-01-06 20:04:59
讓我引導您做這件事的一個WRONG方式,以及一種方法,我承認我使用之前,從來沒有看到它的錯誤,直到這個博客帖子:
我會創建一個新的列表,並填寫隨機選擇並從原始列表中刪除的項目。
退房做的這涼爽的LINQ方式:
public class Employee
{
public int Id
{
get;
set;
}
public string Name
{
get;
set;
}
}
填充列表:
List<Employee> list = new List<Employee>();
list.Add(new Employee { Id = 1, Name = "Davolio Nancy" });
list.Add(new Employee { Id = 2, Name = "Fuller Andrew" });
list.Add(new Employee { Id = 3, Name = "Leverling Janet" });
list.Add(new Employee { Id = 4, Name = "Peacock Margaret" });
list.Add(new Employee { Id = 5, Name = "Buchanan Steven" });
list.Add(new Employee { Id = 6, Name = "Suyama Michael" });
list.Add(new Employee { Id = 7, Name = "King Robert" });
list.Add(new Employee { Id = 8, Name = "Callahan Laura" });
list.Add(new Employee { Id = 9, Name = "Dodsworth Anne" });
然後排序:
list = list.OrderBy(emp => Guid.NewGuid()).ToList();
- 1. 重新排列SharePoint列表項目的最佳方式是什麼?
- 2. 什麼是一次重新排列1000行的最佳方式
- 3. 在RoR中重用項目的最佳方式是什麼?
- 4. 在Android 4+中重新排序項目的最佳方式ListView
- 5. 在NumPy中獲得隨機數的最佳方式是什麼?
- 6. 在Intellij的大型項目中重新排列文件的最佳方式是什麼?
- 7. 在寶石中安排任務的最佳方式是什麼?
- 8. 在內存列表中標識更新項目的最佳方法是什麼?
- 9. 組織C#項目的最佳方式是什麼?
- 10. 排序鏈接列表的最佳方式是什麼?
- 11. 什麼是在項目中組織CSS/JavaScript的最佳方式
- 12. 什麼是創建隨機值的最佳方式?
- 13. 什麼是在JavaScript中獲得隨機數的最佳方法
- 14. 在edmx中重命名列的最佳方式是什麼?
- 15. 生成*不重複*安全隨機數的最佳方法是什麼?
- 16. 什麼是在Magento上安排項目的最佳解決方案?
- 17. 使用bootstrap集中列表項目的最佳方式是什麼?
- 18. 排序部分排序列表的最佳方法是什麼?
- 19. 什麼是更新數據庫列表的最佳方式?
- 20. 在C#中切換表單的最佳方式是什麼?
- 21. 在C中執行查找表的最佳方式是什麼?
- 22. 在Erlang中表示C數組的最佳方式是什麼?
- 23. 在RecyclerView中製作重疊項目的最佳方式是什麼?
- 24. 在github上存儲Symfony項目的最佳方式是什麼?
- 25. 什麼是在Linux上編譯jsp項目的最佳方式?
- 26. 什麼是在線工作MVC項目的最佳方式?
- 27. 在aws上運行django項目的最佳方式是什麼?
- 28. 重新排列vim中製表符分隔文本文件中列的最佳方式是什麼?
- 29. 在列表中組織JPanels的最佳方式是什麼?
- 30. 在c#webform項目中使用SignalR的最佳方式是什麼?
這應該真正成爲標準.NET類庫的一部分... – Pyrolistical 2009-01-06 19:58:12