如何检查数组中的重复项?

时间:2015-06-09 04:12:39

标签: c# arrays duplicates

如何将随机数存储到我的数组中,但前提是数组内部没有重复数据?我的下面的代码仍然输入一个重复的数字。

        Random rand = new Random();
        int[] lotto = new int [6];

        for (int i = 0; i < lotto.Length; i++)
        {
            int temp = rand.Next(1, 10);
            while (!(lotto.Contains(temp)))//While my lotto array doesn't contain a duplicate
            {
                lotto[i] = rand.Next(1, 10);//Add a new number into the array
            }
            Console.WriteLine(lotto[i]+1);
        }

2 个答案:

答案 0 :(得分:4)

试试这个:

Random rand = new Random();
int[] lotto = new int[6];

for (int i = 0; i < lotto.Length; i++)
{
    int temp = rand.Next(1, 10);

    // Loop until array doesn't contain temp
    while (lotto.Contains(temp))
    {
        temp = rand.Next(1, 10);
    }

    lotto[i] = temp;
    Console.WriteLine(lotto[i] + 1);
}

这样代码会一直生成一个数字,直到它找到一个不在数组中的数字,分配它并继续前进。

有很多方法可以“改组”数组,但希望这可以解决您使用代码时遇到的问题。

答案 1 :(得分:1)

真正想要的是将数字从1改为9(至少这是你的例子所暗示的),然后取出前6个元素。检查重复是添加不必要的不​​确定性,如果你有一个洗牌,真的不需要。

请将此accepted answer取为Fisher-Yates shuffle,然后取lotto的前6个元素。

这将是这样的:

lotto = Enumerable.Range(1,9)
                  .Shuffle()
                  .Take(6)
                  .ToArray();