如何洗牌 ListT 中的元素?
生活随笔
收集整理的這篇文章主要介紹了
如何洗牌 ListT 中的元素?
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
咨詢區(qū)
mirezus:
是否有一個最佳的方式對 List<T> 進行洗牌排序,我的項目有一個抽獎模塊,需要對一個有 75個元素的 List<T> 進行隨機排序,請問大家有什么好的實現(xiàn)方式。
回答區(qū)
user453230:
如果你僅僅是想對List中的item進行隨機化排序,我個人推薦一種高效的方式,那就是按照 GUID 排序,參考如下代碼:
var?shuffledcards?=?cards.OrderBy(a?=>?Guid.NewGuid()).ToList();評論中有朋友指出了,GUID并不能保證完全隨機化,所以還有另外一種方式就是使用 Random 類替代,參考如下:
private?static?Random?rng?=?new?Random(); ... var?shuffledcards?=?cards.OrderBy(a?=>?rng.Next()).ToList();Xelights:
如果你不介意使用兩個List的話,那么我這個將是最簡單粗暴的實現(xiàn)方式,但它不是最高效的。
List<int>?xList?=?new?List<int>()?{?1,?2,?3,?4,?5?}; List<int>?deck?=?new?List<int>();foreach?(int?xInt?in?xList)deck.Insert(random.Next(0,?deck.Count?+?1),?xInt);Shehab Fawzy:
你可以通過 擴展方法 的形式實現(xiàn),首先定義一個擴展方法。
public?static?class?IEnumerableExtensions {public?static?IEnumerable<t>?Randomize<t>(this?IEnumerable<t>?target){Random?r?=?new?Random();return?target.OrderBy(x=>(r.Next()));}???????? }然后可以像下面這樣調用。
//?use?this?on?any?collection?that?implements?IEnumerable! //?List,?Array,?HashSet,?Collection,?etcList<string>?myList?=?new?List<string>?{?"hello",?"random",?"world",?"foo",?"bar",?"bat",?"baz"?};foreach?(string?s?in?myList.Randomize()) {Console.WriteLine(s); }點評區(qū)
這個問題挺有意思,前幾年在項目開發(fā)中還真有這么一個需求,第一次我采用了 Guid.NewGuid(),但相信用過的朋友都知道,這玩意用起來真的太慢了,尤其上十萬數(shù)據(jù)之后,所以后期采用了 new Random() 的方式。
總結
以上是生活随笔為你收集整理的如何洗牌 ListT 中的元素?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: .NET 6 全新指标 System.D
- 下一篇: WPF ComboBox 使用 Reso