以前在學校學習陣列的隨機排序時, 大部分都是用swap的方法將雖機兩個元素對調, 並用迴圈隨機對調N次來達到隨機排序的效果, 寫成code大概長得就像這樣
Random rand = new Random(); int r1, r2; string tmpdata = ""; for (int j = 0; j < nums.Count() * 10; ++j) { r1 = rand.Next(0, nums.Count()); r2 = rand.Next(0, nums.Count()); // swap tmpdata = nums[r2]; nums[r2] = nums[r1]; nums[r1] = tmpdata; } |
但今天看到一個用LINQ表是的例子, 還滿有趣的, 原理是利用OrderBy來排序, 排序的根據則給近一個亂數, 就變成隨機排序了
Random rand = new Random(); nums = nums.OrderBy(x => rand.Next()).ToArray(); |
兩行搞定!
如果覺得要特地new Random()是一件很麻煩的事情
也可以乾脆直接代一個GUID進去
nums.OrderBy(x => System.Guid.NewGuid().ToString()).ToArray(); |
只能說有了LINQ之後要處理很多運算問題都變得超簡單的啦!
