带有唯一编号的C#随机数生成器

时间:2017-03-23 22:15:56

标签: c# random numbers unique generator

我设法创建了一个随机生成一定数量的数字的应用程序,并将所有数字放在一个富文本框中(我将从1-100得到10个数字的结果是'67,55,28, 35,7,69,47,59,69,82'。但是,我想添加一个选项,你可以选择你想要的数字是唯一的(复选框),因为数字框接近最大数字框中,数字往往会重复。

我不太确定如何做到这一点,我试过在网上看,但大多数答案对我来说有点过于复杂。

到目前为止的代码(C#Windows Form App FYI):

int minComplexNumber = Convert.ToInt32(minComplexTextBox.Text);
int maxComplexNumber = Convert.ToInt32(maxComplexTextBox.Text);
int intergersNumber = Convert.ToInt32(intergersTextBox.Text);
int numbersLeft = intergersNumber;
resultComplexTextBox.Text = "";

if (UniqueCheckBox.Checked)
{
    //Need something here
}
else
{
    Random comrnd = new Random();
    while (numbersLeft > 1)
    {

        int complexResult = comrnd.Next(minComplexNumber, maxComplexNumber);
        resultComplexTextBox.Text += complexResult + ", ";
        numbersLeft = numbersLeft - 1;
    }

    if (numbersLeft == 1)
    {
        int complexResult = comrnd.Next(minComplexNumber, maxComplexNumber);
        resultComplexTextBox.Text += complexResult;
        numbersLeft = numbersLeft - 1;
    }
}

关于如何获得唯一数字的任何建议?

3 个答案:

答案 0 :(得分:1)

使用List<int>存储可用号码列表,然后根据需要从中删除和删除:

//if checked...
Random comrndu = new Random();
var available = Enumerable.Range(minComplexNumber, (maxComplexNumber - minComplexNumber) + 1).ToList();
while (numbersLeft-- > 0)
{

    int idx = comrndu.Next(0, available.Count);
    int complexResult = available[idx];
    available.RemoveAt(idx);
    resultComplexTextBox.Text += complexResult + ", ";
}
resultComplexTextBox.Text = resultComplexTextBox.Text.Substring(0, resultComplexTextBox.Text.Length - 2);

答案 1 :(得分:1)

我喜欢@David建议,您可以使用以下内容:

var random = new Random();
var possibilities = Enumerable.Range(1, 100).ToList();
var result = possibilities.OrderBy(number => random.Next()).Take(10).ToArray();
Console.WriteLine(String.Join(",", result));

答案 2 :(得分:0)

快速而肮脏的解决方案:生成数字并将其放入列表中(如果它尚未存在)。 完成后,将所有数字写入texbox。

David在评论中提出的解决方案更好。重复一遍,这是快速而肮脏的,如果生成的数字不多,可以帮助你

if (UniqueCheckBox.Checked)
{
    Random comrnd = new Random();
    List<int> generatedNumbers = new List<int>();

    while (numbersLeft > 0)
    {

        int complexResult = comrnd.Next(minComplexNumber, maxComplexNumber);
        if (!generatedNumbers.Contains(complexResult)){
            generatedNumbers.Add(complexResult);
            numbersLeft = numbersLeft - 1;
        }
    }
    resultComplexTextBox.Text += string.Join(", ", generatedNumbers.ToArray());

}