dictionary von einander abziehen

  • VB.NET

Es gibt 8 Antworten in diesem Thema. Der letzte Beitrag () ist von Fakiz.

    dictionary von einander abziehen

    Moin!

    ich dachte die Logik passt - aber doch nicht.

    Es geht darum, dass von _DataAnforderungen die Werte abgezogen werden sollen, die in _DataAnforderungen enthalten sind. Es wird dabei der key verglichen.

    Hier mein Code:

    VB.NET-Quellcode

    1. For i As Integer = 0 To _DataAnforderungen.Count - 1
    2. If _DataKatalog.ContainsKey(_DataAnforderungen(i)) = True Then ' <<< hier ist der Fehler
    3. _DataAnforderungen.Remove(_DataAnforderungen(i))
    4. End If
    5. Next


    dabei wird für die oben gekennzeichnet Zeile folgendes angemerkt:



    Sieht einer von Euch den Fehler?

    Gruß Jan
    Ja, wenn du einen Wert _DataAnforderungen.Remove(_DataAnforderungen(i)) löscht, ändert sich die Nummerierung des Dictionary... Durchlauf die Schleife rückwärts dann passt es.

    Alternativ wenn du auf Nummer sicher gehen willst:

    VB.NET-Quellcode

    1. Dim Dic1 As New Dictionary(Of Integer, String)
    2. Dim Dic2 As New Dictionary(Of Integer, String)
    3. Dic1.Add(1, "Beispiel1")
    4. Dic1.Add(2, "Beispiel2")
    5. Dic1.Add(3, "Beispiel3")
    6. Dic1.Add(4, "Beispiel4")
    7. Dic1.Add(5, "Beispiel5")
    8. Dic2.Add(1, "Beispiel1")
    9. Dic2.Add(3, "Beispiel3")
    10. Dic2.Add(5, "Beispiel5")
    11. Dic2.Add(7, "Beispiel7")
    12. Dic2.Add(9, "Beispiel9")
    13. Dim Löschliste As New List(Of KeyValuePair(Of Integer, String))
    14. For Each elem In Dic1
    15. If Dic2.ContainsKey(elem.Key) Then
    16. Löschliste.Add(elem)
    17. End If
    18. Next
    19. For Each elem In Löschliste
    20. Dic2.Remove(elem.Key)
    21. Next



    Ein Computer wird das tun, was du programmierst - nicht das, was du willst.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Yanbel“ ()

    Moin!

    danke - dann wird daraus

    VB.NET-Quellcode

    1. For i As Integer = _DataAnforderungen.Count - 1 To 0 Step -1
    2. If _DataKatalog.ContainsKey(_DataAnforderungen(i)) = True Then '<<< hier ist weiterhin der Fehler
    3. _DataAnforderungen.Remove(_DataAnforderungen(i))
    4. End If
    5. Next


    aber die Fehlermeldung bleibt bestehen mit



    Gruß Jan
    Ich habe gerade noch ein Beispiel nachgeliefert, das funktioniert. Test das mal.

    Und falls du keinen Wert auf eine Schleife legst:

    VB.NET-Quellcode

    1. _DataAnforderungen= _DataAnforderungen.Except(_DataKatalog.ToList).ToDictionary(Function(k) k.Key, Function(v) v.Value)



    Ein Computer wird das tun, was du programmierst - nicht das, was du willst.

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Yanbel“ ()

    @jan99 Was ist mit

    VB.NET-Quellcode

    1. _DataAnforderungen.Clear()
    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!
    @jan99 Sorry, ich hab das _DataKatalog überlesen.
    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!