在c#中只重复一次打印重复的数字

时间:2011-09-22 01:08:24

标签: c# arrays numbers

我有一个带有“n”个数字的数组,我需要只打印一次所有重复的数字

我制作了这段代码,但出了点问题

for (int i = 0; i < numbers.Length; i++)
            {
                for (int j = 1; j < numbers.Length; j++)
                {
                    if (numbers[i] == numbers[j] && i!=j)
                    {
                        Console.WriteLine(numbers[i]);
                        break;
                    }
                }
            }

然后如果我的数组有元素{2,3,1,5,2,3}

程序打印:

2
3
3

我该怎么办?

6 个答案:

答案 0 :(得分:1)

您可以使用:

using System.Linq;

…

foreach(var number in numbers.Distinct()) Console.WriteLine(number);

修改

我可能误解了这个要求。如果您只想输出多次出现的数字,则可以使用:

foreach(var group in numbers.GroupBy(n => n).Where(g => g.Count() > 1))
    Console.WriteLine(group.Key);

答案 1 :(得分:1)

var query = numbers.GroupBy(x => x)
                   .Where(g => g.Skip(1).Any())
                   .Select(g => g.Key);

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

或者,或者......

var dict = new Dictionary<int, int>();
foreach (int n in numbers)
{
    int count;
    dict.TryGetValue(n, out count);
    if (count == 1)
    {
        Console.WriteLine(n);
    }
    dict[n] = count + 1;
}

答案 2 :(得分:1)

你的代码中的问题:你重复3次,因为当我是1(看第一个3)时,最后列表中有另外3个,当我是5时(查看最后一个{ {1}})在开头附近的列表中还有另外三个。

相反,您应该只查看当前位置之后的那些数字 - 更改为3,以便您只查看当前位置之后的位置,并且不会得到重复的结果。

int j = i;

话虽如此,您的算法效率不如使用内置算法。试试for (int i = 0; i < numbers.Length; i++) { for (int j = i; j < numbers.Length; j++) { if (numbers[i] == numbers[j] && i!=j) { Console.WriteLine(numbers[i]); break; } } }

GroupBy

答案 3 :(得分:0)

获得不同数字的一种方法是

var uniqueNumbers = numbers.Distinct().ToArray()

然后在您的代码段中使用数字迭代遍历uniqueNumbers。

答案 4 :(得分:0)

您可以在循环时将数字添加到HashSet,然后仅在散列集中打印时才会打印。

这允许你一次性完成。

上面的算法是n ^ 2,应该避免。

答案 5 :(得分:0)

// deletes an integer if it appears double
#include <iostream.h>
#include <conio.h>

int main ()
{
    int count=0;
   int ar[10]={1,2,3,3,3,4,5,6,7,7};
 for (int i=0; i<10; i++)
  {

                     if (ar[i]==ar[i+1])
                     count++;
                     else
                     cout << ar[i];


}

getch();
  return 0;
}