none
ArrayList Sortieren / eigene Sorter-Klasse RRS feed

  • Frage

  • Ich habe ein Arraylist in dem Elemente einer eigenen Klasse gespeichert sind und möchte diese Sortieren. Ich habe schon ein bisschen dazu gecoded, allerdings werden die Elemente nur absteigend sortiert.

    Bsp:

    Klasse "Bruch" mit Zähler / Nenner als Int16
    Zähler / Nenner als Klasseneigenschaft mittels Public Property zugreifbar

    Sorter:
    Public Class clsSort 
        Implements IComparer 
     
        Private _Order As SortOrder 
        Private _nach As SortNach 
     
    Public Function Compare(ByVal x As ObjectByVal y As ObjectAs Integer Implements System.Collections.IComparer.Compare 
            If SortOrder.None Then Return 0 
            Dim result As Int16 = 0 
     
            If SortNach.Nenner Then 
                'result = x - y 
                result = x.nenner - y.nenner 
                If SortOrder.Ascending Then Return result * -1 
                Return result 
            End If 
     
            If SortNach.Zähler Then 
                'result = x - y 
                result = x.zahler - y.zahler 
                If SortOrder.Ascending Then Return result * -1 
                Return result 
            End If 
     
        End Function 
    End Class


    Weitere Infos:
    SortNach ist eine eigene "Enum" mit den möglichen Werten "Zähler" und "Nenner"
    Die eigenschaften SortNach und SortOrder werden mit
    public property verändert

    Die Sortierung wird mit
    AL.sort(sorter)

    verwirklicht, wobei: AL => ArrayList mit clsBruch-Elementen
    sorter =>clsSorter


    Das Problem: Das ArrayList wird nur nach Zähler und absteigend sortiert - auch, wenn ich die Sortieroptionen änder.

    Zum Testen habe ich mir 10 clsBruch-Zahlenpaare mit zufälligen Zählern / Nennern erstellen lassen
    • Bearbeitet Agnag Montag, 2. März 2009 09:24 Titel geändert
    Sonntag, 1. März 2009 21:36

Antworten

  • Lösung gefunden:

    Dim sortedAL = From a As Bruch In al Order By a.Nenner Ascending 
     
    al.Items.Clear() 
            For Each p As Bruch In sorted 
                al.Items.Add(p.ToString) 
            Next 

    • Als Antwort markiert Agnag Montag, 2. März 2009 11:34
    Montag, 2. März 2009 11:33