vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Brandneu! sevEingabe v3.0 - Das Eingabecontrol der Superlative!  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück
Rubrik: Variablen/Strings · Arrays   |   VB-Versionen: VB622.08.08
2-dimensionales Array nach beliebiger Spalte sortieren

Mit dieser Funktion lässt sich ein 2-dimensionales Array beliebiger Daten nach einer bestimmten Spalte sortieren

Autor:   Dieter OtterBewertung:     [ Jetzt bewerten ]Views:  50.900 
www.tools4vb.deSystem:  Win9x, WinNT, Win2k, WinXP, Win7, Win8, Win10, Win11 Beispielprojekt auf CD 

Wie man ein einfaches Array sortieren kann, haben wir bereits mehrfach gezeigt.

Wie sieht es aber mit einem 2-dimensionalen Array, das nach einer bestimmten Spalte sortiert werden soll?

Index Nr Name Alter Datum ID
0 1 Otter Dieter 35 05.05.1973 981
1 2 Meier Julia 33 12.08.1974 851
2 3 Müller Hugo 49 01.12.1958 612
3 4 ...      

Genau das zeigen wir Ihnen heute mit diesem Tipp!

Nachfolgende Funktion sortiert das übergebene 2-dimensionale Array nach der angegebenen Spalte, wobei der Spaltenindex hier bei 1 beginnt:

' vSort: 2-dimensionales Array
' index: Spalte, nach der sortiert werden soll (1, 2, 3, ...)
Public Sub QuickSortMultiDim(vSort As Variant, _
  Optional ByVal index As Integer = 1, _
  Optional ByVal lngStart As Variant, _
  Optional ByVal lngEnd As Variant)
 
  ' Wird die Bereichsgrenze nicht angegeben,
  ' so wird das gesamte Array sortiert
 
  If IsMissing(lngStart) Then lngStart = LBound(vSort)
  If IsMissing(lngEnd) Then lngEnd = UBound(vSort)
 
  Dim i As Long
  Dim j As Long
  Dim h As Variant
  Dim x As Variant
  Dim u As Long
  Dim lb_dim As Integer
  Dim ub_dim As Integer
 
  ' Anzahl Elemente pro Datenzeile
  lb_dim = LBound(vSort, 2)
  ub_dim = UBound(vSort, 2)
 
  i = lngStart: j = lngEnd
  x = vSort((lngStart + lngEnd) / 2, index - 1)
 
  ' Array aufteilen
  Do
 
    While (vSort(i, index - 1) < x): i = i + 1: Wend
    While (vSort(j, index - 1) > x): j = j - 1: Wend
 
    If (i <= j) Then
      ' Wertepaare miteinander tauschen
      For u = lb_dim To ub_dim
        h = vSort(i, u)
        vSort(i, u) = vSort(j, u)
        vSort(j, u) = h
      Next u
      i = i + 1: j = j - 1
    End If
  Loop Until (i > j)
 
  ' Rekursion (Funktion ruft sich selbst auf)
  If (lngStart < j) Then QuickSortMultiDim vSort, index, lngStart, j
  If (i < lngEnd) Then QuickSortMultiDim vSort, index, i, lngEnd
End Sub

Kleines Anwendungsbeispiel:
Wir bilden obige Tabelle in einem 2-dimensionalen Array ab und möchten dieses dann nach der Datumsspalte (Spalte 4) sortieren.

' 2-dimensionales Array
' 10 Zeilen á 5 Spalten
Dim MyData(0 To 9, 0 To 4)
' Array füllen
AddToArray MyData, 0, 1, "Otter Dieter", 35, CDate("05.05.1973"), 981
AddToArray MyData, 1, 2, "Meier Julia", 33, CDate("12.08.1974"), 851
AddToArray MyData, 2, 3, "Müller Hugo", 49, CDate("01.12.1958"), 612
AddToArray MyData, 3, 4, "Schmitt Hans", 26, CDate("19.02.1981"), 971
AddToArray MyData, 4, 5, "Müller Anton", 71, CDate("13.10.1968"), 421
AddToArray MyData, 5, 6, "Maier H.", 17, CDate("16.04.1986"), 468
AddToArray MyData, 6, 7, "roSoft", 48, CDate("27.12.1952"), 419
AddToArray MyData, 7, 8, "Mustermann Max", 74, CDate("02.06.1971"), 149
AddToArray MyData, 8, 9, "Schmidt G.", 62, CDate("17.02.1952"), 148
AddToArray MyData, 9, 10, "A. Herbert", 27, CDate("26.11.1963"), 174
 
' Array nach 4. Spalte sortieren
QuickSortMultiDim MyData, 4
' Hilfsfunktion: 2-dimensionales Array schneller füllen
Private Function AddToArray(ByRef arDaten As Variant, _
  ByVal index As Long, _
  ParamArray values() As Variant)
 
  Dim i As Long
 
  For i = 0 To UBound(values)
    arDaten(index, i) = values(i)
  Next i
End Function

Dieser Tipp wurde bereits 50.900 mal aufgerufen.

Voriger Tipp   |   Zufälliger Tipp   |   Nächster Tipp

Über diesen Tipp im Forum diskutieren
Haben Sie Fragen oder Anregungen zu diesem Tipp, können Sie gerne mit anderen darüber in unserem Forum diskutieren.

Aktuelle Diskussion anzeigen (6 Beiträge)

nach obenzurück


Anzeige

Kauftipp Unser Dauerbrenner!Diesen und auch alle anderen Tipps & Tricks finden Sie auch auf unserer aktuellen vb@rchiv  Vol.6
(einschl. Beispielprojekt!)

Ein absolutes Muss - Geballtes Wissen aus mehr als 8 Jahren vb@rchiv!
- nahezu alle Tipps & Tricks und Workshops mit Beispielprojekten
- Symbol-Galerie mit mehr als 3.200 Icons im modernen Look
Weitere Infos - 4 Entwickler-Vollversionen (u.a. sevFTP für .NET), Online-Update-Funktion u.v.m.
 
   

Druckansicht Druckansicht Copyright ©2000-2024 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel