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?

Original source