Group by and count in List
c#
Solution
Use `GroupBy` and `Count`:
var numberGroups = numbers.GroupBy(i => i);
foreach(var grp in numberGroups)
{
var number = grp.Key;
var total = grp.Count();
}
Here's another example which uses an anonymous type to store some informations. It also creates an array since it seems to be the desired result:
var numberGroups = numbers.GroupBy(i => i)
.Select(grp => new{
number = grp.Key,
total = grp.Count(),
average = grp.Average(),
minimum = grp.Min(),
maximum = grp.Max()
})
.ToArray();
foreach (var numInfo in numberGroups)
{
var number = numInfo.number;
// ...
var maximum = numInfo.maximum;
}
Problem
I have an List which is filled with ints, like this: ``` [0] 1 [1] 4 [2] 4 [3] 8 [4] 9 [5] 1 [6] 1 ``` So basically random numbers in there, but the same number can occure multiple times in that list. What i want is to group them by number, but that i can also tell how many times that number was in the list. So that i have a something like: ``` [0] [number] 1 [total] 3 // Occured 3 times in the list [1] [number] 4 [total] 2 [2] [number] 8 [total] 1 [3] [number] 9 [total] 1 ``` Is there a fast/easy way to accomplish this? Or do i have the write out all sorts of loops and checks to construct something like this manually?