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

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

In VB.NET 2003 kannst du ein „2D-Array“ (Dim a(x,3)) nicht direkt nach Zeilen sortieren. Praktisch musst du immer ganze Zeilen gegeneinander tauschen – also z. B. per BubbleSort oder...

Wie speichere ich in VB.NET 2003 GIFs mit transparenten Bereichen als PNG?

Direkt in VB.NET 2003 geht das nicht zuverlässig über System.Drawing, weil .NET 1.1 PNG zwar speichern kann, transparente GIF-Pixel dabei aber oft nicht so behandelt werden, wie man es f&uum...

Wie erstelle, speichere und nutze ich in VB.NET 2003 eine DLL im Projekt?

In VB.NET 2003 erstellst du eine DLL als Class Library, kompilierst sie zu einer .dll und bindest sie im Hauptprojekt per Projektverweis oder Dateiverweis ein. Entscheidend ist: Nicht die DLL „m...

Wie lese und schreibe ich EXIF-Daten in VB.NET 2003?

EXIF ist keine eigene „Datei“, sondern Metadaten im Bild selbst. In VB.NET 2003 liest du EXIF über Image.PropertyItems bzw. GetPropertyItem, und schreiben kannst du nur über SetP...

Wie lasse ich im VB.NET-2003-MonthCalendar selbst gewählte Datumswerte anzeigen?

Ja: Im MonthCalendar zeigst du selbst gewählte Daten über die Fettmarkierung an. Entscheidend ist: Die Daten müssen als DateTime hinzugefügt und danach mit UpdateBoldedDates() aktu...