我真的希望你可以帮我解决这个问题:我目前正在使用Windows Forms,我需要在MessageBox或Label中显示在数组中重复的所有值。例如,如果我的数组存储以下数字:{3,5,3,6,6,6,7} 我需要能够阅读它并抓住并显示重复自己的那些,在这种情况下将是3次两次和6次...感谢您的时间!
答案 0 :(得分:2)
LINQ可以提供帮助;
var array = new int[] { 3, 5, 3, 6, 6, 6, 7 };
var counts = array.GroupBy(n => n) // Group by the elements based their values.
.Where(g => g.Count() > 1) // Get's only groups that have value more than one
.Select(k => k.Key) // Get this key values
.ToList();
计数为List<Int32>
,其值为3
和6
。
如果您想要计算其值的计数值,请查看Jon's answer。
答案 1 :(得分:0)
代码的“核心”逻辑可能如下所示:
var array = new [] { 3, 5, 3, 6, 6, 6, 7 };
var duplicates = array.Where(number => array.Count(entry => entry == number) > 1).Distinct();
要获得Seminda示例中的输出,只需省略最后的.Distinct()。
答案 2 :(得分:0)
类似的东西:
var numbers = new int[]{3, 5, 3, 6, 6, 6, 7};
var counterDic = new Dictionary<int,int>();
foreach(var num in numbers)
{
if (!counterDic.ContainsKey(num))
{
counterDic[num] = 1;
}
else
{
counterDic[num] ++;
}
}
Linq也可能像其他人提到的那样。但它的速度很慢(无论如何,性能不应该是决定因素)。
答案 3 :(得分:0)
如果你想获得像{3,3,6,6,6}这样的结果输出
int[] my = new int[] { 3, 5, 3, 6, 6, 6, 7 };
//List<int> lst = my.OfType<int>().ToList();
var query = my.GroupBy(x => x)
.Where(g => g.Count() > 1)
.SelectMany(m=>m)
.ToList();
答案 4 :(得分:0)
var array = new int[] { 3, 5, 3, 6, 6, 6, 7 };
Dictionary<int, int> counts = array.GroupBy(x => x)
.Where(g => g.Count() > 1)
.ToDictionary(g => g.Key, g => g.Count());
KeyValuePair
s的值是计数。