如何获取在 c# 中重复的值的计数
本文关键字:何获取 获取 | 更新日期: 2023-09-27 18:17:24
我想找到使用 linq 查询重复的整数的数量。 例如,我的列表包括
var array = new int[]{1,1,1,2,2,2,2,3,3,9,9,16,16}
;
现在我想像我想将1
计数获取为3
一样进行查询 2
计数为 4
3
计数为 2
9
计数为2
16
计数为 2
如何在 c# 中使用 linq 来做到这一点。希望你能理解我的问题。
简单,使用 LINQ 的GroupBy
var numbers = new int[] { 1, 1, 1, 2, 2, 2, 2, 3, 3, 9, 9, 16, 16 };
var counts = numbers
.GroupBy(item => item)
.Select(grp => new { Number = grp.Key, Count = grp.Count() });
结果:
Number Count
1 3
2 4
3 2
9 2
16 2
array.GroupBy(x => x)
.Select(g => new {
Val = x.Key,
Cnt = x.Count()
}
);
使用 GroupBy
+ Count
var groups = array.GroupBy(i => i);
foreach(var group in groups)
Console.WriteLine("Number: {0} Count:{1}", group.Key, group.Count());
请注意,您需要添加using System.Linq;
。
您可以使用
LINQ GroupBy
然后对每个组进行Count
:
var dic = array.GroupBy(x => x)
.ToDictionary(g => g.Key, g => g.Count());
在这里,使用了ToDictionary
,因此如果您有大量列表并且需要经常访问,则可以访问Dictionary
获得性能更好的Count
:
int count1 = dic[1]; //count of 1
使用 Linq:
var NumArray= new int[] { 1, 1, 1, 2, 2, 2, 2, 3, 3, 9, 9, 16, 16 };
var counts = NumArray.GroupBy(item => item)
.Select(a=>new {Number=a.Key,Count =a.Count()});
var array = new int[] {1,1,1,2,2,2,2,3,3,9,9,16,16};
var query = from x in array
group x by x into g
orderby count descending
let count = g.Count()
select new {Value = g.Key, Count = count};
foreach (var i in query)
{
Console.WriteLine("Value: " + i.Value + " Count: " + i.Count);
}
结果将是;
Value: 1 Count: 3
Value: 2 Count: 4
Value: 3 Count: 2
Value: 9 Count: 2
Value: 16 Count: 2
这是一个DEMO
.