Array sortieren

  • VB.NET
  • .NET 4.5

Es gibt 4 Antworten in diesem Thema. Der letzte Beitrag () ist von GRRRRRD.

    Array sortieren

    Hallo zusammen,

    erst mal vor ab, der Code funktioniert und macht was er soll, nämlich sortieren.

    VB.NET-Quellcode

    1. ​Public Class Form1
    2. Public Shared Sorter As String
    3. Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    4. Dim jagger(9) As Figures
    5. For i = 0 To 9
    6. Dim f As New Figures
    7. f.Number1 = i
    8. f.Number2 = Chr(i + 65)
    9. f.Number3 = Chr(9 - i + 65)
    10. jagger(i) = f
    11. Next
    12. Sorter = "N3"
    13. Array.Sort(jagger)
    14. Sorter = "N2"
    15. Array.Sort(jagger)
    16. End Sub
    17. End Class
    18. Class Figures
    19. Implements IComparable(Of Figures)
    20. Property Number1() As String
    21. Property Number2() As String
    22. Property Number3() As String
    23. Public Function CompareTo(other As Figures) As Integer Implements IComparable(Of Figures).CompareTo
    24. Dim n As String = Form1.Sorter
    25. Select Case n
    26. Case "N1"
    27. Return Me.Number1.CompareTo(other.Number1)
    28. Case "N2"
    29. Return Me.Number2.CompareTo(other.Number2)
    30. Case "N3"
    31. Return Me.Number3.CompareTo(other.Number3)
    32. End Select
    33. End Function
    34. End Class


    Meine Frage ist: Ich glaube die Variable "sorter" ist recht unelegant. Hat jemand einen Tipp, wie man die eleganter übergeben könnte?
    @GRRRRRD Du kannst das doch intern die Figures machen lassen, indem Du eine Prozedur machst, der Du das Array und den Sorter übergibst.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Dringende Empfehlung: Visual Studio - Empfohlene Einstellungen

    Bevor du irgendetwas weiter machst.
    Dein VisualStudio ist in einem Zustand, wo du eine Zahl nicht von einem String unterscheiden kannst.

    Ansonsten: korrekte Lösung deines Problems folgt in Kürze.



    Lösung: IComparable brauchst du nicht implementieren. Einfach eine geeignete Array.Sort-Überladung nehmen, der du eine Comparison(Of T) mitgeben kannst.
    Gugge dieses:

    VB.NET-Quellcode

    1. Public Class Form1
    2. Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    3. Dim jagger(9) As Figures
    4. For i = 0 To 9
    5. Dim f As New Figures
    6. f.Number1 = i.ToString
    7. f.Number2 = Vb6.Chr(i + 65)
    8. f.Number3 = Vb6.Chr(9 - i + 65)
    9. jagger(i) = f
    10. Next
    11. Debug.Print("Sortiere nach Number2")
    12. Array.Sort(jagger, Function(x, y) x.Number2.CompareTo(y.Number2))
    13. Debug.Print("Sortiere nach Number3")
    14. Array.Sort(jagger, Function(x, y) x.Number3.CompareTo(y.Number3))
    15. End Sub
    16. End Class
    17. Class Figures
    18. Property Number1() As String
    19. Property Number2() As String
    20. Property Number3() As String
    21. End Class
    Mehr muss der Frosch nicht kosten.

    es gibt noch mehr so generische Sortier-Möglichkeiten, zB auch für List(Of T), und mit Linq kann man auch sehr schön sortieren.

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „ErfinderDesRades“ ()