3 回答
TA贡献1995条经验 获得超2个赞
调用之后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);
}
这是一个非常快速的回复,但我对第一行有一点问题,特别是“data.groupby(info => info.metric)”
我假设你已经有一些class看起来像的列表/数组
class UserInfo {
string name;
int metric;
..etc..
}
...
List<UserInfo> data = ..... ;
当你这样做时data.GroupBy(x => x.metric),它意味着“对于xIEnumerable中定义的每个元素data,计算它.metric,然后将具有相同度量的所有元素分组为a 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]
TA贡献1836条经验 获得超4个赞
假设userInfoList
是List<UserInfo>
:
var groups = userInfoList .GroupBy(n => n.metric) .Select(n => new { MetricName = n.Key, MetricCount = n.Count() } ) .OrderBy(n => n.MetricName);
对于lambda表达式GroupBy()
,n => n.metric
意味着它会得到场metric
从每一个UserInfo
遇到的对象。类型n
取决于上下文,在第一次出现时是类型UserInfo
,因为列表包含UserInfo
对象。在第二次出现n
是类型Grouping
,因为现在它是一个Grouping
对象列表。
Grouping
有像你这样的扩展方法.Count()
,.Key()
以及你期望的其他任何东西。正如你查.Lenght
一个string
,你可以检查.Count()
在一组。
TA贡献1856条经验 获得超11个赞
userInfos.GroupBy(userInfo => userInfo.metric) .OrderBy(group => group.Key) .Select(group => Tuple.Create(group.key, group.Count()));
- 3 回答
- 0 关注
- 415 浏览
添加回答
举报