我想用更大的数组填充一个具有唯一值的小数组。如何检查唯一性?
这就是我所拥有的:
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]);
}
答案 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)