c#从数组中删除重复项

时间:2015-10-03 18:23:49

标签: c# arrays

int[] RandArray = new int[6];

        Random randNumber = new Random();
        for (int Counter = 0; Counter < RandArray.Length; Counter++)
        {
            RandArray[Counter] = randNumber.Next(1,50);

        }

        Console.WriteLine(RandArray[0]);
        Console.WriteLine(RandArray[1]);
        Console.WriteLine(RandArray[2]);
        Console.WriteLine(RandArray[3]);
        Console.WriteLine(RandArray[4]);
        Console.WriteLine(RandArray[5]);
        Console.ReadLine();

该程序从1到49生成6个随机数。 目前,它产生两次相同的数字。如何使其不重复任何数字?这段代码可以改进吗?

4 个答案:

答案 0 :(得分:2)

您可以使用HashSet存储到目前为止生成的数字。如果HashSet中不包含该数字,则它只会添加新生成的数字。像这样:

Random rand_number = new Random();

HashSet<int> numbers = new HashSet<int>();

while (numbers.Count < 6)
{
    int new_number = rand_number.Next(1, 50);

    numbers.Add(new_number);
}

如果需要,可以使用List代替HashSet,但如果要生成的整数数量很大,HashSet的表现会更好。

您可以在完成后将结果转换为数组(如果需要),如下所示:

int[] integer_array = numbers.ToArray();

相反,如果您希望数字按升序排序,则可以执行此操作:

int[] integer_array = numbers.OrderBy(x => x).ToArray();

答案 1 :(得分:1)

这会回答您的标题问题。
使用class Abc1 def self.sum(arg1, arg2) arg1 + arg2 end end Abc1.sum(2,3) # =>5 LINQ运算符,它将删除重复的元素 https://msdn.microsoft.com/en-us/library/vstudio/bb348436(v=vs.100).aspx

这回答了您的身体问题
要多次生成相同的数字,请将数字存储在Distinct中,并检查每次迭代是否先前生成了数字,并在需要时重新滚动。

答案 2 :(得分:1)

你可以创建一个从1到50的数字范围,随机排序,然后将该范围内的6个排序到一个列表中:

var rnd = new Random();
var randomNumbers = Enumerable.Range(1,50).OrderBy(x => rnd.Next()).Take(6).ToList();

.NET小提琴 - https://dotnetfiddle.net/i06zCY

答案 3 :(得分:0)

您可以检查您创建的每个号码的副本:

int[] RandArray = new int[6];

Random randNumber = new Random();
for (int Counter = 0; Counter < RandArray.Length; Counter++) {
  // Loop until you find an unused number
  bool found;
  do {
    // Get a random number
    int num = randNumber.Next(1,50);
    // Look through the numbers picked so far
    found = false;
    for (int i = 0; i < Counter; i++) {
      found |= num == RandArray[i];
    }
    // If the number was found go back and pick a new one
  } while(found);
  // Put the number in the array
  RandArray[Counter] = num;
}

foreach (int n in RandArray) {
  Console.WriteLine(n);
}
Console.ReadLine();