我的代码的某些部分没有被执行

时间:2013-12-08 07:02:14

标签: c#

我正在尝试使用以下代码列出数组中的所有重复项,但我似乎无法获得正确的结果,我不知道什么似乎是问题

for (int m = 0; m < malouda.Length; m++)
{
   for (int j = m + 1; j < malouda.Length; j++)
   {
   if (malouda[m] == malouda[j])
      {
      Console.WriteLine(malouda[j]);
      }
   }
}

4 个答案:

答案 0 :(得分:2)

int[] malouda = { 1, 5, 7, 1, 7, 7, 1, 1 };

for (int m = 0; m < malouda.Length; m++)
{
    for (int j = 0; j < m; j++)
    {
        if (malouda[m] == malouda[j])
        {
            Console.WriteLine("{0} duplicate at index {1}", malouda[m], m);
            break; // exit inner loop if current item is duplicate
        }
    }
}

以下重复的输出:

1 duplicate at index 3
7 duplicate at index 4
7 duplicate at index 5
1 duplicate at index 6
1 duplicate at index 7

答案 1 :(得分:0)

使用集合来跟踪“已知”元素:

Set<int> s = new HashSet<int>();
for (int i in malouda)
{
    if (s.Contains(i))
    {
        Console.WriteLine(i);
    }
    else
    {
        s.Add(i);
    }
}

答案 2 :(得分:0)

尝试使用LINQ,您将获得所需:

var doubles = malouda.GroupBy(x => x)
   .Where( x => x.Count() > 1)
   .Select(x => new { Value = x.Key, Count = x.Count() })
   .ToList()
   .ForEach(x => 
   {
       for (int j = 0; j < x.Count; j++)
          Console.WriteLine(x.Value);
   });

如果你有这个[1, 2, 5, 2, 5],你会得到这个: 2 2 五 5

答案 3 :(得分:0)

你可以选择类似的东西,

foreach (var match in malouda.GroupBy(x => x).Where(x => x.Any())
{
     foreach (var i in match)
     {
          Console.WriteLine(i);
     }
}