LINQ To Objects GroupBy-Methode

9

Wie funktioniert die LINQ To Objects GroupBy-Methode? Sieht es die ganze Sammlung für jeden Schlüssel durch? Gibt es eine Möglichkeit, der GroupBy-Methode zu sagen, dass die Auflistung sortiert ist?

    
SiberianGuy 20.05.2011, 19:25
quelle

3 Antworten

2

GroupBy würde, wenn es sinnvoll gemacht wird, in einem einzigen Durchgang funktionieren. Eine grundlegende Implementierung (nicht ihre) wäre etwas vergleichbar mit:

%Vor%

Das gruppiert grundsätzlich nach Schlüssel und erstellt eine Liste für jeden eindeutigen Schlüssel, der die Werte enthält.

Sie könnten Dinge wie den zuletzt gesehenen Schlüssel vergleichen (um mit sortierten Daten zu helfen), aber ... Sie müssten ein Profil erstellen, um zu wissen, ob es sich lohnt.

>     
Marc Gravell 20.05.2011 19:29
quelle
2

Schauen wir uns einfach die Überlastung an

%Vor%

als seine am einfachsten zu verstehen. Effektiv wird der Code so etwas tun:

Aufzählung über source

Ordnen Sie für jedes element in Quelle das Element key = keySelector(element)

zu

Sehen Sie, ob key in einem Wörterbuch enthalten ist, das von TKey codiert ist     Wenn dies nicht der Fall ist, fügen Sie key mit dem Wert a List<TSource> und dem ersten Element element hinzu.     Andernfalls rufen Sie den Schlüssel List<TSource> ab und fügen Sie element zur Liste hinzu

Jetzt haben Sie eine Wörterbuchzuordnung TKey - & gt; TSource und kann leicht eine Sequenz von IGrouping<TKey, TElement> erzeugen.

So etwas wie

%Vor%

Von hier aus können Sie leicht eine Sequenz von IGrouping<TKey, TSource> ergeben.

Ich verstehe nicht, warum Sie denken, dass die Liste sortiert ist.

    
jason 20.05.2011 19:33
quelle
0
  

Sieht es für jeden Schlüssel die ganze Sammlung durch?

Nein. Die Implementierung von GroupBy ist O (n), nicht O (n ^ 2)

    
Amy B 20.05.2011 19:50
quelle

Tags und Links