個人習慣
運用Guid"極度難重複特性"取亂數
加上LINQ的簡潔
"一行代碼"達到亂數目的
//測試樣本
var list = new List<int>();
for (int i = 0; i < 1000; i++)
list.Add(i);
//運用NewGuid極度難重複特性取亂數
var random_list = list.OrderBy(i => Guid.NewGuid()).ToList();
真的沒想過用Guid取亂數,這樣好簡潔
想請教您是怎麼知道或想到這個方式的呢?
另外可以麻煩你說明一下這個方法的運作原理嗎@_@?
我試了一下把OrderBy(i => Guid.NewGuid())代換成OrderBy(i => Random.Next(1,100))也是可以Work的,效果也還算不錯
我不懂的點是..Lambda應該是將 => 左邊的值傳入右邊當參數
但這個寫法右邊沒有出現i,所以應該只是省略掉?
我試了OrderBy(i => i = Guid.NewGuid())結果也一樣
我猜測這個寫法是把List中每個位置賦予一個值,再用這個值來比大小嗎?試了Random.Next(1,3)),發現拿到1跟拿到2的各會分一區,但各區的順序還是一樣由小而大,所以每個List的欄位應該都只拿到一次用來當索引的亂數值。
但我從MSDN看不出來可以印證我想法的資料,越看越不懂這個方法是怎麼work的@_@
rainbowrain 雖然考古了,使用Random.Next有一個缺點,C#預設亂數種子是[系統時間],如果短時間內大量取亂數,會變成同一個種子(同一秒)取到一模一樣的亂數,導致數字不是完全隨機