首页 > 后端开发 > C++ > LINQ 如何高效地对数据进行分组并统计出现次数?

LINQ 如何高效地对数据进行分组并统计出现次数?

Mary-Kate Olsen
发布: 2025-01-22 00:46:10
原创
646 人浏览过

How Can LINQ Group Data and Count Occurrences Efficiently?

利用LINQ高效分组和计数数据

C#中的LINQ(语言集成查询)提供了一种强大的方法来操作和查询数据。在需要分组和计数数据集的情况下,LINQ提供了一种简洁高效的解决方案。

假设我们有一个包含用户及其相关指标和日期的数据集:

<code>UserInfo(姓名, 指标, 日期, 其他指标)

数据:
joe  1 2011/01/01 5
jane 0 2011/01/02 9
john 2 2011/01/03 0
jim  3 2011/01/04 1
jean 1 2011/01/05 3
jill 2 2011/01/06 5
jeb  0 2011/01/07 3
jenn 0 2011/01/08 7</code>
登录后复制

我们的目标是获取一个表格,按指标顺序(0, 1, 2, 3...)分组,并显示每个指标出现的总次数。

使用LINQ进行分组和计数

使用LINQ实现此目标,我们可以使用'GroupBy'和'Select'方法:

<code>foreach(var line in data.GroupBy(info => info.metric)
                        .Select(group => new { 
                             Metric = group.Key, 
                             Count = group.Count() 
                        })
                        .OrderBy(x => x.Metric))
{
     Console.WriteLine("{0} {1}", line.Metric, line.Count);
}</code>
登录后复制

说明:

  1. 'GroupBy'方法应用于数据集,根据'metric'属性进行分组。这将产生一系列组,每个组包含具有相同'metric'值的元素。
  2. 'Select'方法用于将每个组投影到一个新的匿名对象中,该对象具有两个属性:'Metric'(组的键)和'Count'(组中元素的数量)。
  3. 'OrderBy'方法按升序对匿名对象进行排序,排序依据是'Metric'。
  4. 结果是一个匿名对象的序列,每个对象代表一个指标及其计数。

输出:

<code>0 3
1 2
2 2
3 1</code>
登录后复制

另一种方法

虽然提供的LINQ解决方案效率很高,但可以进一步简化:

<code>var result = data.GroupBy(info => info.metric)
                 .Select(group => new { 
                      Metric = group.Key, 
                      Count = group.Count() 
                 })
                 .OrderBy(x => x.Metric);</code>
登录后复制

这里的唯一区别是,我们没有使用'foreach'循环迭代结果,而是将其赋值给名为'result'的变量。

关键点

  • GroupBy() 创建一个组的序列。
  • Select() 将一个组投影到一个匿名对象。
  • Count() 返回组中元素的数量。
  • OrderBy() 按指定的属性对结果进行排序。

以上是LINQ 如何高效地对数据进行分组并统计出现次数?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板