Seiten

Donnerstag, 9. Dezember 2010

VB.NET: Sortieren einer Dictionary(Of TKey, TValue)-Auflistung

Dies ist ein kurzer, aber vielleicht recht nützlicher Artikel über das Sortieren eines Dictionary(Of TKey, TValue). Als Teil eines kleineren Projekts war es erforderlich, ein Dictionary mit Schlüssel- und Wert-Paaren zu sortieren und abhängig von der Auswertung des Werts nur den Schlüssel (vom Typ String) zurückzugeben.

Der folgende Quellcode-Ausschnitt zeigt beispielhaft, wie es funktioniert:

  Private Function GetKeyOfGreatestOrSmallestKeyValuePair(ByVal indicator As String) As String

    Dim ListOfKeyValuePairs As New Dictionary(Of String, Double)

    With ListOfKeyValuePairs
      .Add("Key 1", 20.35)
      .Add("Key 2", 10.25)
      .Add("Key 3", 45.95)
      .Add("Key 4", 900.22)
      .Add("Key 5", 1.07)
    End With

    Dim listedItems As IOrderedEnumerable(
       Of KeyValuePair(Of String, Double)) = ListOfKeyValuePairs.OrderBy(Function(v) v.Value)

    Select Case indicator

      Case Is = "Greatest"

        Return listedItems.Last.Key.ToString

      Case Is = "Smallest"

        Return listedItems.First.Key.ToString

    End Select

  End Function



Die Function "GetKeyOfGreatestOrSmallestKeyValuePair" gibt, je nach dem welcher Parameter übergeben wird, entweder den Schlüssel des größten oder den Schlüssel des kleinsten aller Werte eines Dictionary mit Schlüssel- und Wert-Paaren zurück. Das Dictionary wird mit der Variablen "ListOfKeyValuePairs" erzeugt. Dann wird eine weitere Variable erzeugt. Das ist die Variable "listedItems" vom Typ "IOrderedEnumerable(Of KeyValuePair(Of String, Double))". Dieser Variablen wird die Auswertung der Methode "OrderBy()" übergeben, die auf das Dictionary angewendet wird. Der Clou besteht darin, dass der Methode "OrderBy()" eine Lambda-Funktion übergeben wird, die die Werte jedes Schlüssel-/Wert-Paares zurückgibt. Die Methode "OrderBy()" sortiert die von der Lambda-Funktion übergebenen Werte in aufsteigender Reihenfolge. Im Ergebnis enthält die Variable "listedItems" eine neue Auflistung vom Typ "IOrderedEnumerable(Of KeyValuePair(Of String, Double)), deren Schlüssel-/Wert-Paare in aufsteigender Reihenfolge sortiert sind. Diese sortierte Auflistung kann dann ausgewertet werden.

Anstatt der Methode "OrderBy()" kann man z.B. auch die Methode "OrderByDescending()" anwenden. Als Ergebnis erhält man dann ein neues Dictionary, das in absteigender Reihenfolge sortiert ist.

Die Methoden "OrderBy()" und "OrderByDescending()" zählen zu den sogenannten Erweiterungsmethoden der "Dictionary(Of TKey, TValue)"-Klasse. Es gibt eine Vielzahl weiterer Erweiterungsmethoden, die auf ein Dictionary angewendet werden können. Mit deren Hilfe sind weitere, umfangreiche Abfrage- und Filter-Aktionen möglich.

Keine Kommentare:

Kommentar veröffentlichen