如何获取在 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 来做到这一点。希望你能理解我的问题。

如何获取在 c# 中重复的值的计数

简单,使用 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.