После вызова 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)
, это означает «для каждого элемента 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]