生成无重复数字的函数c#

时间:2017-11-27 10:31:52

标签: c# random

我尝试编写一个函数,用于生成从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获取数字。

请帮帮我

1 个答案:

答案 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++];
        }