c#唯一随机数

本文关键字:随机数 唯一 | 更新日期: 2023-09-27 18:20:30

我正在尝试获取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;
}

谢谢你的帮助!

c#唯一随机数

将问题一分为二:

  1. 创建一个由X个随机的、唯一的数字组成的列表。有很多方法可以做到这一点:

    a。创建一个包含0-100的所有数字的列表,然后对它们进行洗牌。或

    b。保留你已经创建的所有数字的哈希集(除了列表之外),如果以前没有添加过,只添加一个新的。

  2. 然后,同时循环遍历列表和数据行,并将值插入到这些行中。

这里有一个简单的方法,不用为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;
        }
    }
}