我正在尝试使用以下代码列出数组中的所有重复项,但我似乎无法获得正确的结果,我不知道什么似乎是问题
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]);
}
}
}
答案 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);
}
}