發表文章

目前顯示的是有「隨機」標籤的文章

C# 如何產生不重複的隨機碼

某些情況下,需要產生一系列的亂碼,而且不重複。 下面兩種方式都可以達到效果 下面這個範例是打亂 1 - 9999 數字排序,然後取出前 1000 筆紀錄來使用。 方法一:傻瓜產生法 一般而言會使用迴圈,然後一邊產生亂碼一邊檢查是否重複。 Random rnd = new Random(); List<int> list1 = new List<int>(); do {     int number = rnd.Next(1, 9999);     int dup = list1.IndexOf(number);     if (dup < 0)     {         list1.Add(number);     } } while (list1.Count < 1000); 優點:速度快 缺點:當取號數量等於亂數數量時,可能會變成迴圈永遠不會結束(因為最後一碼超難取到)。 方法二:洗牌法 下面使用一種亂數排序方式,將一系列數字打亂其順序,然後再取出要使用的數字範圍,就可以很快的得到我們要的亂數範圍。 Random rnd = new Random(); List<int> randomList = Enumerable.Range(1, 9999)     .OrderBy(x => rnd.Next()).Take(1000).ToList(); 優點:直覺取號,當取號數量等於亂數數量時保證可取。 缺點:耗時稍多(其實頂多比方法一多十幾毫秒而已)。 夠簡單吧!