| |
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 |
|
|
vb@rchiv CD Vol.6 vb@rchiv Vol.6
Geballtes Wissen aus mehr als 8 Jahren vb@rchiv!
Online-Update-Funktion Entwickler-Vollversionen u.v.m.Jetzt zugreifen Tipp des Monats Neu! sevPopUp 2.0
Dynamische Kontextmenüs!
Erstellen Sie mit nur wenigen Zeilen Code Kontextmenüs dynamisch zur Laufzeit. Vordefinierte Styles (XP, Office, OfficeXP, Vista oder Windows 8) erleichtern die Anpassung an die eigenen Anwendung... Weitere 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
|
|