Zwei Arraylisten miteinander vergleichen

  • VB.NET

Es gibt 4 Antworten in diesem Thema. Der letzte Beitrag () ist von VaporiZed.

    Zwei Arraylisten miteinander vergleichen

    Hallo zusammen.

    Ich möchte gerne zwei Arraylisten miteinander vergleichen. Wenn die Werte aus der zweiten Arraylist (Excludeliste) in der ersten Arraylist (Werteliste) vorkommen, dann soll der entsprechende Wert in der ersten Arraylist (Werteliste) gelöscht werden. Die übriggebliebenen Werte sollen dann anschließend in einer ListView übertragen werden. Das klappt aber irgendwie nicht so wie ich es gerne hätte.

    Ich bekomme immer wieder folgende Fehlermeldung:

    System.InvalidOperationException: "Die Sammlung wurde geändert. Der Enumerationsvorgang kann möglicherweise nicht ausgeführt werden."

    Mein derzeitiger Code:

    VB.NET-Quellcode

    1. Dim Werteliste As New ArrayList
    2. Werteliste.Add("Auto")
    3. Werteliste.Add("Baum1")
    4. Werteliste.Add("Baum2")
    5. Werteliste.Add("Haus")
    6. Dim Excludeliste As String = "Auto;Baum*"
    7. Dim ExcludeString As String()
    8. ExcludeString = Excludeliste.Split(";")
    9. For Each ExcludeSuche As String In ExcludeString
    10. For Each Suche As String In Werteliste
    11. If Suche Like ExcludeSuche Then
    12. Werteliste.Remove(Suche)
    13. Else
    14. 'Do Nothing
    15. End If
    16. Next Suche
    17. Next ExcludeSuche
    18. For Each Werte As String In Werteliste
    19. ListView.Items.Add(Werte)
    20. Next Werte


    Hat jemand vielleicht eine Idee wie ich dieses Problem gelöst bekomme?

    Vielen Dank im Voraus.
    Schnellschuss: Nicht mit For Each, sondern ner normalen, aber rückwärts laufenden For-Schleife.

    Ach ja: Willkommen im Forum.

    Bevor Du weitermachst, bitte die empfohlenen VS-Einstellungen verwenden. Denn Zeile#11 ist Option Strict Off
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    Ebenfalls Willkommen im Forum. :thumbup:
    ArrayList ist nicht typisiert, und deshalb auf dem Müllplatz der NET-Geschichte geklandet.
    Verwende lieber eine List(Of String).
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    @VaporiZed und RodFromGermany

    Ich habe eure Verbesserung mal eingebaut und jetzt funktioniert es.

    Vielen Dank für eure Hilfe :thumbup:

    VB.NET-Quellcode

    1. Dim Werteliste As New List(Of String)
    2. Werteliste.Add("Auto")
    3. Werteliste.Add("Baum1")
    4. Werteliste.Add("Baum2")
    5. Werteliste.Add("Haus")
    6. Dim Exclude As String()
    7. Dim Excludeliste As String = "Auto;Baum*"
    8. Dim ExcludeString As String
    9. Exclude = Excludeliste.Split(";")
    10. For Each ExcludeSuche As String In Exclude
    11. For i As Integer = Werteliste.Count - 1 To 0 Step -1
    12. ExcludeString = Werteliste.Item(i)
    13. If ExcludeString Like ExcludeSuche Then
    14. Werteliste.Remove(ExcludeString)
    15. Else
    16. 'Do Nothing
    17. End If
    18. Next i
    19. Next ExcludeSuche
    20. For Each Werte As String In Werteliste
    21. ListView.Items.Add(Werte)
    22. Next Werte
    Naja, das Option Strict On fehlt noch. Und Else 'Do Nothing … kann ersatzlos weg.
    Und insgesamt geht es mit LINQ noch einfacher. Da kann man nämlich sowas schreiben.
    Dim ListeMitVerbleibendenElementen = ErsteListe.Except(ZweiteListe).ToList
    fertig

    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.