Gebäude ein Wörterbuch der Grafen von Elementen in einer Liste
Ich habe eine Liste mit einer Reihe von Zeichenfolgen, die auftreten können, mehr als einmal. Ich würde gerne diese Liste und erstellen ein Wörterbuch der Objekte in der Liste als Schlüssel und die Anzahl Ihrer vorkommen als Wert.
Beispiel:
List<string> stuff = new List<string>();
stuff.Add( "Peanut Butter" );
stuff.Add( "Jam" );
stuff.Add( "Food" );
stuff.Add( "Snacks" );
stuff.Add( "Philosophy" );
stuff.Add( "Peanut Butter" );
stuff.Add( "Jam" );
stuff.Add( "Food" );
und das Ergebnis wäre ein Wörterbuch mit:
"Peanut Butter", 2
"Jam", 2
"Food", 2
"Snacks", 1
"Philosophy", 1
Habe ich eine Möglichkeit, dies zu tun, aber es scheint nicht, wie ich die Verwendung der guten Sachen, die in C# 3.0
public Dictionary<string, int> CountStuff( IList<string> stuffList )
{
Dictionary<string, int> stuffCount = new Dictionary<string, int>();
foreach (string stuff in stuffList) {
//initialize or increment the count for this item
if (stuffCount.ContainsKey( stuff )) {
stuffCount[stuff]++;
} else {
stuffCount.Add( stuff, 1 );
}
}
return stuffCount;
}
InformationsquelleAutor Ryan Ische | 2009-03-26
Schreibe einen Kommentar Antworten abbrechen
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie die group-Klausel in C#, dies zu tun.
Können Sie die Erweiterung Methoden auch direkt, wenn Sie wollen:
Von hier aus ist es ein Katzensprung, um es zu platzieren in einem
Dictionary<string, int>
:groups = groups.OrderBy(g => g.Stuff)
;Hätte ich eine spezielle Liste, die unterstützt durch das Wörterbuch und die add-Methode würde test für eine Mitgliedschaft erhöhen und zählen, wenn Sie gefunden werden.
sorta wie:
Eine Idee wäre, geben Sie dem Wörterbuch einen default-Wert von null, so dass Sie nicht haben, zu besonderer Fall des ersten Auftretens.
Gut, es gibt nicht wirklich einen besseren Weg, es zu tun.
Vielleicht könnten Sie schreiben eine LINQ-Abfrage, würde die Gruppe der Streicher und dann zählen, wie viele strings es gibt in jeder Gruppe, aber das wäre nicht annähernd so effizient wie das, was Sie bereits haben.
Können Sie GroupBy und erstellen dann ein Wörterbuch zu zählen jede Gruppe. Als performance-test zeigen, in der Regel gibt es effizientere Ansätze, die andere als Linq. Ich denke, dein code ist effizienter, während Linq-Lösung ist besser lesbar und schön.