C# 如何產生不重複的隨機碼
某些情況下,需要產生一系列的亂碼,而且不重複。
下面兩種方式都可以達到效果
下面這個範例是打亂 1 - 9999 數字排序,然後取出前 1000 筆紀錄來使用。
方法一:傻瓜產生法
一般而言會使用迴圈,然後一邊產生亂碼一邊檢查是否重複。
優點:速度快
缺點:當取號數量等於亂數數量時,可能會變成迴圈永遠不會結束(因為最後一碼超難取到)。
方法二:洗牌法
下面使用一種亂數排序方式,將一系列數字打亂其順序,然後再取出要使用的數字範圍,就可以很快的得到我們要的亂數範圍。
優點:直覺取號,當取號數量等於亂數數量時保證可取。
缺點:耗時稍多(其實頂多比方法一多十幾毫秒而已)。
夠簡單吧!
下面兩種方式都可以達到效果
下面這個範例是打亂 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();
優點:直覺取號,當取號數量等於亂數數量時保證可取。
缺點:耗時稍多(其實頂多比方法一多十幾毫秒而已)。
夠簡單吧!
留言