Wie wäre es mit so etwas...
var l1 = new List() { 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() );
}
Edit nach Kommentar: Ich werde versuchen, diesem gerecht zu werden. :)
In meinem Beispiel handelt es sich um eine Func
, weil meine Liste Integers enthält. Also sage ich GroupBy, wie meine Elemente gruppiert werden sollen. Die Func nimmt eine Integer-Zahl entgegen und gibt den Schlüssel für meine Gruppierung zurück. In diesem Fall erhalte ich ein IGrouping
(eine Gruppierung von Integers mit einem Integer als Schlüssel). Wenn ich es beispielsweise auf (i => i.ToString()
) ändern würde, würde ich meine Gruppierung nach einem String gruppieren. Man kann sich ein weniger triviales Beispiel als eine Gruppierung nach "1", "2", "3" vorstellen...vielleicht erstelle ich eine Funktion, die "eins", "zwei", "drei" zurückgibt, um meine Schlüssel zu bilden...
private string SampleMethod( int i )
{
// gib magischerweise "Eins" zurück, wenn i == 1, "Zwei" wenn i == 2, etc.
}
Das ist also eine Func, die eine Integer-Zahl entgegennimmt und einen String zurückgibt, genauso wie...
i => // gib magischerweise "Eins" zurück, wenn i == 1, "Zwei" wenn i == 2, etc.
Aber da die ursprüngliche Frage nach dem Wissen um den Wert der Originalliste und dessen Anzahl fragte, habe ich einfach einen Integer verwendet, um meine Integer-Gruppierung zu schlüsseln und mein Beispiel einfacher zu gestalten.