VB.Net - Frage zu SortedList
Hi,
habe mal ne Frage zum Verständnis von "for each" im Zusammenhang mit "SortedList" in VB.Net.
Wenn ich die Elemente einer Liste durchlaufe und dabei ein Element lösche, dann "springt der Zeiger". Das weiß ich und kann auch damit umgehen, jedoch weiß ich nicht, ob das nicht noch einfacher geht.
Beispiel: Habe eine Liste mit unbekannten Schlüsseln aber bekannten Werten.
Wenn ich die Elemente durchlaufe, nach einem Element "Buchstabe C" oder "Buchstabe D" suche und diese dann lösche, dann fliegt mir der Code im Beispiel 1 nach dem Löschen von "Buchstabe C" beim "Next" raus.
Alternativ über den Key. Hier kommt der Fehler auch beim "Next" wenn "Buchstabe C" gelöscht wurde.
Lösen tue ich das so, indem ich in einem ersten Durchlauf zunächst alle Keys der zu löschenden Elemente in einer Liste sammle und dann in einem zweiten Durchlauf die Elemente laut der gesammelten Liste lösche.
Geht das nicht auch einfacher?
E.
habe mal ne Frage zum Verständnis von "for each" im Zusammenhang mit "SortedList" in VB.Net.
Wenn ich die Elemente einer Liste durchlaufe und dabei ein Element lösche, dann "springt der Zeiger". Das weiß ich und kann auch damit umgehen, jedoch weiß ich nicht, ob das nicht noch einfacher geht.
Beispiel: Habe eine Liste mit unbekannten Schlüsseln aber bekannten Werten.
Dim x As New SortedList
x.Add("unbekannter Key A", "Buchstabe A")
x.Add("unbekannter Key B", "Buchstabe B")
x.Add("unbekannter Key C", "Buchstabe C")
x.Add("unbekannter Key D", "Buchstabe D")
Wenn ich die Elemente durchlaufe, nach einem Element "Buchstabe C" oder "Buchstabe D" suche und diese dann lösche, dann fliegt mir der Code im Beispiel 1 nach dem Löschen von "Buchstabe C" beim "Next" raus.
For Each y As DictionaryEntry In x
If y.Value = "Buchstabe C" Or y.Value = "Buchstabe D" Then
x.Remove(y)
Else
MsgBox(y)
End If
Next
Alternativ über den Key. Hier kommt der Fehler auch beim "Next" wenn "Buchstabe C" gelöscht wurde.
For Each k As String In x.Keys
Dim y As String = x(k)
If y = "Buchstabe C" Or y = "Buchstabe D" Then
x.Remove(k)
Else
MsgBox(y)
End If
Next
Lösen tue ich das so, indem ich in einem ersten Durchlauf zunächst alle Keys der zu löschenden Elemente in einer Liste sammle und dann in einem zweiten Durchlauf die Elemente laut der gesammelten Liste lösche.
Dim ToRemove As New List(Of String)
For Each k As String In x.Keys
Dim y As String = x(k)
If y = "Buchstabe C" Or y = "Buchstabe D" Then
ToRemove.Add(k)
Else
MsgBox(y)
End If
Next
For Each k As String In ToRemove
x.Remove(k)
Next
Geht das nicht auch einfacher?
E.
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 231075
Url: https://administrator.de/forum/vb-net-frage-zu-sortedlist-231075.html
Ausgedruckt am: 03.04.2025 um 20:04 Uhr
2 Kommentare
Neuester Kommentar
Hallo Emeriks,
oder so wenn doch mehrere Sachen zu entfernen sind mit Array für die Strings...
Grüße Uwe
Geht das nicht auch einfacher?
z.B. sox.RemoveAt(x.IndexOfValue("Buchstabe C"))
x.RemoveAt(x.IndexOfValue("Buchstabe D"))
Dim arr As String() = {"Buchstabe C", "Buchstabe D"}
For Each el As String In arr
x.RemoveAt(x.IndexOfValue(el))
Next