Как на счет этого ...
var l1 = new List<int>() { 1,2,3,4,5,2,2,2,4,4,4,1 };
var g = l1.GroupBy( i => i );
foreach( var grp in g )
{
Console.WriteLine( "{0} {1}", grp.Key, grp.Count() );
}
Редактировать за комментарий: Я постараюсь сделать это справедливо. :)
В моем примере это Func<int, TKey>
, потому что мой список - целые. Итак, я говорю GroupBy, как группировать свои товары. Func принимает int и возвращает ключ для моей группировки. В этом случае я получу IGrouping<int,int>
(группа целых чисел с ключом int). Например, если бы я изменил его на (i => i.ToString()
), я бы выделил свою группировку строкой. Вы можете представить себе менее тривиальный пример, чем ввод «1», «2», «3» ... возможно, я создаю функцию, которая возвращает «один», «два», «три» в качестве моих ключей ...
private string SampleMethod( int i )
{
// magically return "One" if i == 1, "Two" if i == 2, etc.
}
Итак, это Func, который принимает int и возвращает строку, как ...
i => // magically return "One" if i == 1, "Two" if i == 2, etc.
Но, так как исходный вопрос требовал знания исходного значения списка и его количества, я просто использовал целое число, чтобы набрать мою целочисленную группировку, чтобы упростить мой пример.