c#唯一随机数

时间:2015-11-04 16:54:04

标签: c# random numbers

我试图获得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;
}

感谢您的帮助!

4 个答案:

答案 0 :(得分:6)

将您的问题分成两部分:

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

    一个。创建所有数字0-100的列表,然后shuffle them。 OR

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

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

答案 1 :(得分:0)

您需要将已经使用的数字与从random.Next获得的数字进行比较。如果您已经使用过,请选择另一个。我也喜欢海因齐的回答。

答案 2 :(得分:0)

这是在没有为Lis​​t创建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;
        }

答案 3 :(得分:0)

这是没有改组的算法和之前使用的结果:

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;
        }
    }
}