Wie sortiere ich in VB.NET 2003 ein Array mit 4 Spalten und x Zeilen?

Antwort vom

**Ein echtes 2D-Array in VB.NET 2003 kannst du nicht direkt mit `Array.Sort` sortieren; praktisch musst du die Zeilen entweder selbst tauschen oder die Daten zuerst in eine sortierbare Struktur umbauen.** `Array.Sort` arbeitet für eindimensionale Arrays, nicht sinnvoll für ein Array mit 4 Spalten und x Zeilen. ([learn.microsoft.com](https://learn.microsoft.com/en-us/archive/msdn-magazine/2001/may/basic-instincts-new-features-in-visual-basic-net-variables-types-arrays-and-properties)) ## Die einfache Lösung bei 4 Spalten Wenn dein Array z. B. so aussieht: ```vb Dim daten(anzZeilen - 1, 3) As String ``` und du nach einer bestimmten Spalte sortieren willst, sortierst du **zeilenweise**. Das heißt: Du vergleichst `daten(i, sortSpalte)` mit `daten(j, sortSpalte)` und tauschst bei Bedarf **alle 4 Spalten** der beiden Zeilen. ```vb Private Sub Sortiere2DArray(ByRef daten(,) As String, ByVal sortSpalte As Integer) Dim i As Integer Dim j As Integer Dim k As Integer Dim tmp As String Dim zeilen As Integer = daten.GetUpperBound(0) Dim spalten As Integer = daten.GetUpperBound(1) For i = 0 To zeilen - 1 For j = i + 1 To zeilen If String.Compare(daten(i, sortSpalte), daten(j, sortSpalte)) > 0 Then For k = 0 To spalten tmp = daten(i, k) daten(i, k) = daten(j, k) daten(j, k) = tmp Next End If Next Next End Sub ``` Aufruf: ```vb Sortiere2DArray(daten, 2) ' sortiert nach Spalte 2 ``` ## Warum das der richtige Ansatz ist Der entscheidende Punkt ist: **Nicht einzelne Zellen sortieren, sondern komplette Zeilen als Datensatz behandeln.** Sonst zerstörst du die Zuordnung der 4 Spalten. Beispiel: Wenn in Spalte 0 eine ID und in Spalte 1 ein Name steht, darf beim Sortieren nie nur der Name verschoben werden. Die ganze Zeile muss mitwandern. ## Wichtiger Unterschied Wenn du numerische Werte sortierst, ist `String.Compare` oft falsch. Dann wird `"100"` vor `"20"` einsortiert, weil Zeichenketten alphabetisch verglichen werden. Für Zahlen musst du vorher umwandeln: ```vb If CInt(daten(i, sortSpalte)) > CInt(daten(j, sortSpalte)) Then ``` ## Bessere Alternative Wenn du häufiger sortieren musst, ist ein `DataTable` mit `DataView.Sort` meist sauberer, weil dort nach Spalten sortiert werden kann und auch Mehrfachsortierungen möglich sind. ADO.NET unterstützt genau solche Sortierungen über die `Sort`-Eigenschaft einer `DataView`. ([learn.microsoft.com](https://learn.microsoft.com/de-de/dotnet/framework/data/adonet/dataset-datatable-dataview/sorting-and-filtering-data)) Für VB.NET 2003 ist aber bei einem einfachen 4-Spalten-Array die manuelle Zeilensortierung meist die direkteste Lösung.

Kategorie: Technik Tags: Vbnet Array Sortieren

Verwandte Fragen

AHK v2: Array in Array?

Yes — in AutoHotkey v2 you can nest arrays inside arrays. An array element can itself be another array, object, or map. (autohotkey.wiki) ahk arr := [ ["a", "b", "c&qu...