打电话后GroupBy
,你会得到一系列的组IEnumerable<Grouping>
,其中每个分组本身公开Key
用于创建组,也是一个IEnumerable<T>
原始数据集中的任何项目。你只需要打电话Count()
在该分组上获取小计。
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);
}
> This was a brilliantly quick reply but I'm having a bit of an issue with the first line, specifically "data.groupby(info=>info.metric)"
我假设你已经有一些列表/数组class
看起来像
class UserInfo {
string name;
int metric;
..etc..
}
...
List<UserInfo> data = ..... ;
当你这样做时data.GroupBy(x => x.metric)
,这意味着“对于每个元素x
在 IEnumerable 定义中data
,计算出它是.metric
,然后将具有相同度量的所有元素分组为Grouping
并返回一个IEnumerable
所有由此产生的组。鉴于您的示例数据集
<DATA> | Grouping Key (x=>x.metric) |
joe 1 01/01/2011 5 | 1
jane 0 01/02/2011 9 | 0
john 2 01/03/2011 0 | 2
jim 3 01/04/2011 1 | 3
jean 1 01/05/2011 3 | 1
jill 2 01/06/2011 5 | 2
jeb 0 01/07/2011 3 | 0
jenn 0 01/08/2011 7 | 0
groupby 之后会产生以下结果:
(Group 1): [joe 1 01/01/2011 5, jean 1 01/05/2011 3]
(Group 0): [jane 0 01/02/2011 9, jeb 0 01/07/2011 3, jenn 0 01/08/2011 7]
(Group 2): [john 2 01/03/2011 0, jill 2 01/06/2011 5]
(Group 3): [jim 3 01/04/2011 1]