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?
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.
>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)
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.