C#唯一随机数
c# unique random number
我正在尝试获取 X 个介于 0 和 100 之间的随机数(其中 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;
}
感谢您的帮助!
将你的问题一分为二:
创建 X 个随机唯一数字的列表。有很多方法可以做到这一点:
一个。创建一个包含所有数字 0-100 的列表,然后是 shuffle them。或者
b。保留你已经创建的所有数字的哈希集(除了列表),如果之前没有添加过,则只添加一个新数字。
然后,同时遍历列表和数据行,并将值插入到行中。
您需要将您已经使用的号码与您从 random.Next 获得的下一个号码进行比较。如果您已经使用过它,请选择另一个。我也喜欢 Heinzi 的回答。
这是无需为 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;
}
}
}
我正在尝试获取 X 个介于 0 和 100 之间的随机数(其中 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;
}
感谢您的帮助!
将你的问题一分为二:
创建 X 个随机唯一数字的列表。有很多方法可以做到这一点:
一个。创建一个包含所有数字 0-100 的列表,然后是 shuffle them。或者
b。保留你已经创建的所有数字的哈希集(除了列表),如果之前没有添加过,则只添加一个新数字。
然后,同时遍历列表和数据行,并将值插入到行中。
您需要将您已经使用的号码与您从 random.Next 获得的下一个号码进行比较。如果您已经使用过它,请选择另一个。我也喜欢 Heinzi 的回答。
这是无需为 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;
}
}
}