| |
VB.NET - FortgeschritteneSortieren 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 | |
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. | |
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) | |
| 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 |
|
|
sevOutBar 4.0
Vertikale Menüleisten á la Outlook
Erstellen von Outlook ähnlichen Benutzer- interfaces - mit beliebig vielen Gruppen und Symboleinträgen. Moderner OfficeXP-Style mit Farbverläufen, Balloon-Tips, u.v.m. Weitere InfosTipp des Monats TOP Entwickler-Paket
TOP-Preis!!
Mit der Developer CD erhalten Sie insgesamt 24 Entwickler- komponenten und Windows-DLLs. Die Einzelkomponenten haben einen Gesamtwert von 1605.50 EUR...
Jetzt nur 599,00 EURWeitere Infos
|
|
|
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
|
|