vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
vb@rchiv Offline-Reader - exklusiv auf der vb@rchiv CD Vol.4  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

VB.NET - Fortgeschrittene
Sortieren von Strings mit zwei- und dreistelligen Zahlen 
Autor: hit123
Datum: 16.03.23 17:53

Hallo zusammen,

ich hänge gerade an einem Problem bei dem ich nicht weiterkomme. Ich habe eine "List of String" die
Werte wie "0-15", "210-25" und "22-68" enthält. Wenn ich die sortiere, kommt am Ende die Reihenfolge
"0-15", "210-25" und "22-68" heraus.

Gibt es irgendeine Möglichkeit das einfach und richtig zu sortieren, so dass am Ende die Reihenfolge
"0-15", "22-68" und "210-25" herauskommt?

Gibt es da eine einfache Lösung dafür oder muss ich hier mit "Bubble-Sort" arbeiten?

Danke für eure Tipps und Hilfe
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Sortieren von Strings mit zwei- und dreistelligen Zahlen 
Autor: emaNoN
Datum: 16.03.23 20:52

Vlt. hilft folgendes:
    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
 
        Dim test As New List(Of String)
        Dim test2 As New List(Of String)
 
        test.Add("0-15")
        test.Add("210-25")
        test.Add("22-68")
 
        For Each value In test
 
            test2.Add(Format(CInt(Strings.Left(value, InStr(value, "-") - 1)), _
              "000“) & "-" &
                Format(CInt(Replace(value, Strings.Left(value, InStr(value, _
                "-")), "")), "000"))
 
        Next
 
        test2.Sort()
 
        For Each value In test2
 
            Debug.Print(value)
 
        Next
 
    End Sub
Ausgabe:
000-015
022-068
210-025
Oder wenn du die Original-Strings haben möchtest:
        For Each value In test2
 
            value = CInt(Strings.Left(value, 3)).ToString & "-" & CInt( _
              Strings.Right(value, 3)).ToString
            Debug.Print(value)
 
        Next
Ausgabe:
0-15
22-68
210-25


Beitrag wurde zuletzt am 16.03.23 um 21:12:28 editiert.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Beispiel: StringNumericComparer 
Autor: Manfred X
Datum: 04.05.23 10:19

Hallo!


Hier ein Beispiel für eine Comparer-Klasse:
Public Class StringNumericComparer
    Implements IComparer(Of String)
 
    Public Function Compare(x As String, y As String) As Integer Implements _
      IComparer(Of String).Compare
        Dim parts_x() As String = x.Split("-"c, StringSplitOptions.TrimEntries)
        Dim parts_y() As String = y.Split("-"c, StringSplitOptions.TrimEntries)
 
        Dim res As Integer = CInt(parts_x(0)).CompareTo(CInt(parts_y(0)))
 
        If res <> 0 Then Return res
 
        Return CInt(parts_x(1)).CompareTo(CInt(parts_y(1)))
    End Function
End Class
Anwendung:
Dim vl() As String = {"0-15", "210-25", "22-68", "22-71", "0-6"}
 
Array.Sort(vl, New StringNumericComparer)
 
'oder bei Listen:
 
Dim vl2 As New List(Of String)(vl)
 
vl2.Sort(New StringNumericComparer)
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Sie sind nicht angemeldet!
Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.

Einloggen  |  Neu registrieren

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

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