[C#][LINQ]隨機排序的小技巧

文章分類: C#, LINQ




以前在學校學習陣列的隨機排序時, 大部分都是用swap的方法將雖機兩個元素對調, 並用迴圈隨機對調N次來達到隨機排序的效果, 寫成code大概長得就像這樣

?View Code CSHARP
            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來排序, 排序的根據則給近一個亂數, 就變成隨機排序了

?View Code CSHARP
            Random rand = new Random();
            nums = nums.OrderBy(x => rand.Next()).ToArray();

兩行搞定!

如果覺得要特地new Random()是一件很麻煩的事情

也可以乾脆直接代一個GUID進去

?View Code CSHARP
            nums.OrderBy(x => System.Guid.NewGuid().ToString()).ToArray();

只能說有了LINQ之後要處理很多運算問題都變得超簡單的啦!

發表回應

Bad Behavior has blocked 36 access attempts in the last 7 days.