使用唯一的随机整数填充数组

时间:2017-12-14 11:13:03

标签: c# arrays

我想用更大的数组填充一个具有唯一值的小数组。如何检查唯一性?

这就是我所拥有的:

int[] numbers45 = new int[45];

for (int i = 0; i <= 44; i++)             // I create a big array
{
    numbers45[i] = i + 1;                
}         

Random r = new Random();
int[] draw5 = new int[5];                 //new small array 

Console.WriteLine("The 5 draws are:");

for (int i = 1; i <= 4; i++)
{
    draw5[i] = numbers45[r.Next(numbers45.Length)];  //I fill the small array with values from the big one. BUT the values might not be unique.
    Console.WriteLine(draw5[i]);
}

3 个答案:

答案 0 :(得分:0)

有多种方法可以满足您的要求。

首先,我建议使用其中一个包装数组类型的类,并添加一些你可以使用的额外功能(在这种情况下,List可能是一个完美的结构使用)!

处理此问题的一种方法是检查该值是否已在draw5数组中。这可以通过(例如)List<T>.Contains(T)函数完成,如果存在,请尝试另一个。

就个人而言,我可能会使用OrderBy linq方法随机化第一个数组,然后只返回一个随机数,如:

numbers45.OrderBy(o => random.Next());

这样,当数字应该被添加到第二个列表时,这些数字已经是随机且唯一的。

并注意:请记住数组索引从索引0开始。在第二个循环中,从1开始并转到4,即,您不会为第一个索引设置值 您只需运行for (int i=0;i<5;i++)即可。

答案 1 :(得分:-1)

HashSet<int> hs = new HashSet<int>();
int next = random.next(45);
while(hs.Length <=5)
{
    if(!hs.Contains(array[next]))
        hs.Add(array[next]);
    next = random next(45);
}

答案 2 :(得分:-1)

受到Jite's answer的启发,我改为使用th_0随机化数字

1

然后你可以通过以下方式进行抽奖:

Guid