簡體   English   中英

C#唯一隨機數

[英]c# unique random number

我試圖獲取0到100之間的X個隨機數(其中X是一個變量),並將它們添加到DataGridView中的一行。 我正在使用下面的代碼,但是問題是我需要不可能有兩次相同的數字。 有沒有辦法確保我得到唯一的隨機數?

int X = 20;
Random random = new Random();
int randomrow = random.Next(0, 100);

for (int i = 0; i < X; i++)
{
   int randomNumber = random.Next(0, 100);
   data.Rows[randomrow][3] = randomNumber;
}

謝謝您的幫助!

將您的問題一分為二:

  1. 創建X個隨機唯一數字的列表。 有很多方法可以做到這一點:

    一種。 創建一個包含所有數字0-100的列表,然后將其隨機播放 要么

    b。 保留所有已創建數字的哈希集(除列表外),並且僅在以前未添加過的情況下才添加一個新的。

  2. 然后,同時遍歷列表和數據行,並將值插入行中。

您需要將已經使用的數字與從random.Next獲得的下一個進行比較。 如果您已經使用過,請選擇另一個。 我也喜歡海因茲的回答。

這是一種簡單的方法,無需為List創建shuffle方法(盡管有一些示例)。 基本上創建所有可能整數的列表,填充列表,然后按新的GUID排序。

        int X = 20;
        var RowNumbers = new List<int>();

        for (int i = 0; i < X; i++)
            RowNumbers.Add(i);

        foreach (int i in RowNumbers.OrderBy(f => Guid.NewGuid()))
        {
            data.Rows[i][3] = i;
        }

這是沒有改組的算法和使用以下方法的先前結果:

var max = 100; // max available value
var count = 20; // number of random numbers

var random = new Random();
var rest = (double)max;
for (int i = 0; i < max; i++, rest--)
{
    if (count / rest > random.NextDouble())
    {
        Console.WriteLine(i); // here is your random value
        count--;

        if (count == 0)
        {
            break;
        }
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM