我尝试编写一个函数,用于生成从1到80的数字,不带重复。
问题是我的生成器工作不正确,因为重复存在。
public void generator() // сделать по кнопке, но пока что проверка тип на работоспособность
{
Random rand = new Random();
int[] arr = new int[20];
int temp = 0;
foreach (TextBox c in panel1.Controls)
{
for (int i = 0; i < 20; i++)
{
arr[i] = rand.Next(1, 80);
temp = arr[i];
for (int j = 0; j < i; j++)
{
while (arr[i] == arr[j])
{
arr[i] = rand.Next(1, 80);
j = 0;
temp = arr[i];
}
temp = arr[i];
}
c.Text = arr[i].ToString();
}
}
}
我尝试使用this solution,但我不明白如何从那里List
获取数字。
请帮帮我
答案 0 :(得分:-1)
避免重复值的另一种方法是使用“HashSet”对象。它允许您创建不同值的列表。 您可以将HashSet对象用于随机数,然后您可以扫描这些项并将其填充到您需要的任何位置。 HashSet唯一的问题是它没有任何索引,所以我们必须将它转换为List对象。
您可以在下面找到一个示例:
var random = new Random();
HashSet<int> containerSet = new HashSet<int>();
do
{
containerSet.Add(random.Next(1, 80));
} while (containerSet.Count < 20);
var position = 0;
var containerList = containerSet.ToList();
foreach (TextBox c in panel1.Controls)
{
c.Text = containerList[position++];
}