Mehrdimensionales array erstellen und sortieren

  • VB.NET

Es gibt 8 Antworten in diesem Thema. Der letzte Beitrag () ist von rotherford.

    Mehrdimensionales array erstellen und sortieren

    Hallo,

    wie der Titel schon sagt, möchte ich ein mehrdimensionales array erstellen und dieses anschliessend nach dem ersten Wert sortieren lassen.

    VB.NET-Quellcode

    1. Public Indexfeld5(0, 1, 2) As String
    2. Do While ReaderIntern.Read
    3. HToolbox.Items.Add(ReaderIntern("FN01").ToString & "-" & ReaderIntern("FN02").ToString)
    4. ReDim Preserve Indexfeld5(0, 1, HToolbox.Items.Count)
    5. Indexfeld5(HToolbox.Items.Count, 0, 0) = ReaderIntern("FN01").ToString
    6. Indexfeld5(HToolbox.Items.Count, 1, 0) = ReaderIntern("FN02").ToString
    7. Indexfeld5(HToolbox.Items.Count, 1, 2) = ReaderIntern("Ident_Nummer").ToString
    8. Loop
    9. Array.Sort(Indexfeld5)
    Gruß Markus
    Danke,

    ich denke der Array.Sort reicht hier aus, da die Toolstrip-Combobox, in welche ich die Daten ("FN01") einfüge, nach der gleichen Methode sortiert. Es muss halt nur gewährleistet sein, dass im Array nach dem ersten Feld sortiert wird, und die Felder 2 und 3 beim Feld 1 des Array's bleiben.

    Zur Zeit habe ich aber Probleme bei dem richtigen Befüllen des Array's.
    Gruß Markus
    verwende nicht ein mehrdim Array, sondern ein jagged Array.
    Noch besser ist eine jagged List(Of T), weil da mußt du nicht ständig redimensionieren beim Befüllen.

    Gugge auf Auflistungen + MehrDimension nach "unechte Mehrdimensionalität".

    Auf jaggedArrays/Listen kann man problemlos die Sort-Funktion anwenden, und nach egal was sortieren.
    Habe es mal anders versucht, aber bekomme es nun nicht sortiert

    VB.NET-Quellcode

    1. Public Structure Indexfelder
    2. Public Feld01 As String
    3. Public Feld02 As String
    4. Public IDNR As Integer
    5. End Structure
    6. Public IndexList() As Indexfelder




    VB.NET-Quellcode

    1. Do While ReaderIntern.Read
    2. HToolbox.Items.Add(ReaderIntern("FN01").ToString & "-" & ReaderIntern("FN02").ToString)
    3. ReDim IndexList(HToolbox.Items.Count)
    4. With IndexList(HToolbox.Items.Count)
    5. .Feld01 = ReaderIntern("FN01").ToString
    6. .Feld02 = ReaderIntern("FN02").ToString
    7. .IDNR = CInt(ReaderIntern("Ident_Nummer"))
    8. End With
    9. Loop
    Gruß Markus
    VB-Tag richtig benutzen - ich finde, als Leser hat man Anrecht auf korrekt eingerückte Codezeilen ;)

    Wie gesagt: das mit dem ständigen redimensioieren ist ein Gräuel - da nehme man besser eine List(Of Indexfelder)
    Wenn dir das nix sagt - dieses Buch Lesen - es sei denn, dir ist egal, Gurken-Code zu coden.

    Zum Sortieren nimm die Array.Sort-Methode in der Überladung, die eine Comparison(Of T) akzeptiert.

    btw besser die List(Of Indexfelder).Sort-Methode in der Überladung, die ein Comparison(Of T) akzeptiert.

    Nun müsste man wissen, was eine Comparison(Of T) ist - die dafür geeignete Lektüre habe ich ja schon empfohlen - die ist wirklich empfehlenswert ;)

    Aber ich kann auch vorkauen:

    VB.NET-Quellcode

    1. Public Structure Indexfelder
    2. Public Feld01 As String
    3. Public Feld02 As String
    4. Public IDNR As Integer
    5. End Structure
    6. Public IndexList As New List(Of Indexfelder)
    7. Private Sub ReadData(ByVal ReaderIntern As IDataReader)
    8. Do While ReaderIntern.Read
    9. Dim flds = New Indexfelder With { _
    10. .Feld01 = ReaderIntern("FN01").ToString, _
    11. .Feld02 = ReaderIntern("FN02").ToString, _
    12. .IDNR = CInt(ReaderIntern("Ident_Nummer"))}
    13. HToolbox.Items.Add(flds.Feld01 & "-" & flds.Feld02)
    14. IndexList.Add(flds)
    15. Loop
    16. IndexList.Sort(Function(x, y) x.Feld01.CompareTo(y.Feld01))
    17. End Sub
    guck - sogar mit Einrückungen ;)

    ist natürlich ungetestet, weil dein ReaderIntern kennichnich

    @rotherford: Komm - das hatte ich schon verbessert, eh du dein post abgeschickt hattest ;)

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