Announcement

Collapse
No announcement yet.

Array sortierien

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Array sortierien

    Ich möchte ein Array mit einer Structure als Typ sortieren.
    Code:
    Structure Beispiel
    Dim strNummer As String Dim strVon As String Dim strBis As String
    End Structure Dim test(100) As Beispiel
    Mit Array.Sort hat es nicht funkioniert.
    Ich möchte das Array nach strNummer sortieren.

  • #2
    also wenn du als ergebnis deiner sortierung z.b.
    1
    11
    2
    24
    3

    bekommen hast, liegt das ganz einfach and der sortierlogig eines strings.

    definiere sie als int und du solltest das problem gelöst haben oder
    du füllst die zahlen mit 0'en am anfang auf z.b. 0000000001, 0000000002, ...

    Comment


    • #3
      Originally posted by Nooa View Post
      also wenn du als ergebnis deiner sortierung z.b.
      1
      11
      2
      24
      3

      bekommen hast, liegt das ganz einfach and der sortierlogig eines strings.

      definiere sie als int und du solltest das problem gelöst haben oder
      du füllst die zahlen mit 0'en am anfang auf z.b. 0000000001, 0000000002, ...
      Nein, dann sollte er einen "natural Sort" implementieren.

      "Definiere sie als int..." -> Nun, was machst du, wenn es aus irgendwelchen Gründen nicht möglich ist, die Daten anders zu defnieren/formatieren?

      Aber ich denke das Problem liegt eher daran, der den falschen Sort benutzt. Hier wäre Sort(Array, IComparer) zu nutzen und eine eigene Vergleichsroutine zu schreiben, die eben das genwünschte Element aus der Struktur vergleicht
      Christian

      Comment


      • #4
        Originally posted by Christian Marquardt View Post
        Nein, dann sollte er einen "natural Sort" implementieren.

        "Definiere sie als int..." -> Nun, was machst du, wenn es aus irgendwelchen Gründen nicht möglich ist, die Daten anders zu defnieren/formatieren?

        Aber ich denke das Problem liegt eher daran, der den falschen Sort benutzt. Hier wäre Sort(Array, IComparer) zu nutzen und eine eigene Vergleichsroutine zu schreiben, die eben das genwünschte Element aus der Struktur vergleicht
        du hast sehr wohl recht, dass man den "natural sort" verwenden kann.
        jedoch ist für mich die variable strNummer irreführend...

        denn dies lässt darauf deuten, dass dort nur nummern wie z.b. "0", "1",... gespeichert werden.

        wieso nicht gleich int verwenden?

        Comment


        • #5
          jedoch ist für mich die variable strNummer irreführend...
          Das irreführende fängt für mich schon an wenn jemand Arrays und structs anstatt generische Listen und Klassen verwendet Weder Nummer noch von und bis hören sich vordergründig nach strings an. Letztlich können wir nur hoffen das das tatsächlich nur ein Beispiel oder eine Schulaufgabe ist aber kein produktiver Code.

          Um Beispiel Structures mit dem normalen Array.Sort(Array) zu sortieren könnte man Beispiel IComparable implementieren lassen und darin den Vergleich über strNummer vornehmen.

          [HIGHLIGHT=VB.NET]Structure Beispiel
          Implements IComparable

          Public Function CompareTo(ByVal obj As Object) As Integer Implements System.IComparable.CompareTo
          Return Me.strNummer.CompareTo(CType(obj, Beispiel).strNummer)
          End Function

          Dim strNummer As String
          Dim strVon As String
          Dim strBis As String
          End Structure[/HIGHLIGHT]

          Comment


          • #6
            wieso nicht gleich int verwenden?
            Sicherlich wäre das die einfachste Lösung, wenn er das ändern kann. Jedoch liegt das Problem wohl (noch) nicht in der Sortierung, sondern m.E. überhaupt darin etwas sortiert zu bekommen. Die vom Threadersteller genutzte Methode Array.Sort ohne einen IComparer wird wohl nichts bringen. Woher soll der Compiler wissen, nach welchem Element aus dem Struct sortiert werden soll
            Christian

            Comment


            • #7
              Hallo,

              siehe Natürliche Sortierung (Natural Sorting) für C#, das kannst du ja nach VB.net übersetzen (lassen per Tool).


              mfG Gü
              "Any fool can write code that a computer can understand. Good programmers write code that humans can understand". - Martin Fowler

              Comment

              Working...
              X