Jagged Array sortieren

  • VB.NET

Es gibt 5 Antworten in diesem Thema. Der letzte Beitrag () ist von CamFreak.

    Jagged Array sortieren

    Hallöchen Zusammen ich bräuchte mal wieder eure Hilfe.
    Ich habe ein 2-Dimensionales Jagged-Array dies ich sortieren will.
    Jedoch klappt das mit der Array.Sort(Jagged-Array) nicht.
    ich möchte nach dem Name Sortieren. Wäre nett wenn ihr mir helfen könntet.
    Danke schon mal im Vorraus ;)

    VB.NET-Quellcode

    1. Public Class Form1
    2. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    3. Dim jaggedarray(5)() As String
    4. Dim Name As String
    5. Dim Stadt As String
    6. Dim Geschlecht As String
    7. Name = "Peter"
    8. Stadt = "NewYork"
    9. Geschlecht = "Male"
    10. jaggedarray(0) = {Name, Stadt, Geschlecht}
    11. Name = "Anna"
    12. Stadt = "Berlin"
    13. Geschlecht = "Female"
    14. jaggedarray(1) = {Name, Stadt, Geschlecht}
    15. Array.Sort(jaggedarray)
    16. End Sub
    17. End Class


    Verschoben. ~Trade

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Trade“ ()

    @CamFreak Willkommen im Forum. :thumbup:
    Wenn Du was sortieren willst, muss es sortierbar sein.
    In einem Fall empfehle ich Dir eine Datenklasse und kein Jagged Array zu verwenden, dann geht das so:

    VB.NET-Quellcode

    1. Public Class Form1
    2. Class People
    3. Implements IComparable(Of People)
    4. Public Name As String
    5. Public Stadt As String
    6. Public Geschlecht As String
    7. Public Function CompareTo(other As People) As Integer Implements IComparable(Of People).CompareTo
    8. Return Me.Name.CompareTo(other.Name)
    9. End Function
    10. Public Overrides Function ToString() As String
    11. Return String.Format("{0}, {1} ({2})", Name, Stadt, Geschlecht)
    12. End Function
    13. End Class
    14. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    15. Dim jaggedarray(5) As People
    16. Dim p1 As New People
    17. With p1
    18. .Name = "Peter"
    19. .Stadt = "New York"
    20. .Geschlecht = "Male"
    21. End With
    22. jaggedarray(0) = p1
    23. Dim p2 As New People
    24. With p2
    25. .Name = "Anna"
    26. .Stadt = "Berlin"
    27. .Geschlecht = "Female"
    28. End With
    29. jaggedarray(1) = p2
    30. Array.Sort(jaggedarray)
    31. End Sub
    32. End Class
    Die Überladung von ToString() in der Datenklasse erleichtert das Debuggen:
    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).
    VB-Fragen über PN / Konversation werden ignoriert!
    @RodFromGermany
    Vielen vielen Dank für die schnelle und überaus gute Antwort. Es hat auf Anhieb perfekt geklappt. Ich bin begeistert :thumbsup:
    allerdings habe ich jetzt noch ein kleines Problem dazu bekommen, :whistling: und zwar werden meine Personen durch eine Schleife ergänzt(Also wird p1 immer durch die neue Person ersetzt). Jedoch wird die Letzte Person immer über Alle anderen Personen im jaggedarray überschreiben.

    VB.NET-Quellcode

    1. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    2. Dim jaggedarray(5) As People
    3. Dim p1 As New People
    4. With p1
    5. .Name = "Peter"
    6. .Stadt = "New York"
    7. .Geschlecht = "Male"
    8. End With
    9. jaggedarray(0) = p1
    10. jaggedarray(1) = New People {p1} 'In dieser Zeile müsste die Lösung stehen. Die Zeile ist nur leider Falsch
    11. With p1
    12. .Name = "Anna"
    13. .Stadt = "Berlin"
    14. .Geschlecht = "Female"
    15. End With
    16. jaggedarray(1) = p1
    17. Array.Sort(jaggedarray)
    18. End Sub


    Vielen Dank schon mal im Vorraus ;)
    Bilder
    • Forum.PNG

      44,15 kB, 523×174, 40 mal angesehen

    CamFreak schrieb:

    VB.NET-Quellcode

    1. jaggedarray(1) = New People {p1} 'In dieser Zeile müsste die Lösung stehen. Die Zeile ist nur leider Falsch
    Klar, denn es gibt in der Klasse People keinen Copy-Konstruktor (Konstruktor mit einer Instanz derselben Klasse als Parameter).
    Den müsstest Du erst schreiben, etwa so:

    VB.NET-Quellcode

    1. Public New(other As People)
    2. ' was tun
    3. End Sub
    ======================
    Jedoch wird die Letzte Person immer über Alle anderen Personen im jaggedarray überschreiben.
    Auch klar, denn es handelt sich um Instanzen einer Klasse, in diesem Falle um eine einzige Instanz, die von Dir permanent geändert wird.
    Wenn Du mit New immer eine neue Instanz generierst, klappt das.
    Informiere Dich mal über Value-Types und Reference-Types, frag Frau Google nach .net value type vs reference type.
    docs.microsoft.com/de-de/dotne…types-and-reference-types
    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).
    VB-Fragen über PN / Konversation werden ignoriert!

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „RodFromGermany“ ()