Dictionary wenn key gleich ist dann value addieren

  • VB.NET

Es gibt 2 Antworten in diesem Thema. Der letzte Beitrag () ist von Picturebox5.

    Dictionary wenn key gleich ist dann value addieren

    Hallo nach längerer erfolgloser suche habe ich mich entschlossen hier nach hilfe zu fragen.
    Ich bitte um verzeiung wenn es schon einen Thread auf meine Frage gibt, aber ich bin echt nicht fündig geworden weder Google noch hier.
    Nun zu meinem Problem.
    Ich lade von ListView1 datensätze in Listview2, es kann vorkommen das der key von einem Datensatz doppelt ist aber mit einem anderen Value, nun möchte ich in Listview2 den Datensatz key nur einmal haben aber Value von Listbox1 addieren.
    Beispiel
    In Listview1 steht
    Key
    Value
    a
    1
    b
    2

    Listview2 steht

    Key
    Value
    a
    1
    c
    3

    wenn ich nun die daten von Listview1 an Listview2 übergebe sollte folgendes Resultat erscheinen
    Key
    Value
    a
    2
    b
    2
    c
    3

    Nun zu meiner frage, wie kann ich das am besten lösen?
    Gibt es überhaupt eine lösung?

    Mein Code bisher
    Listview

    VB.NET-Quellcode

    1. For Each Item As ListViewItem In Me.ListView1.Items
    2. Name = Item.Text
    3. Menge = Item.SubItems.Item(7).Text
    4. Dim kvp As KeyValuePair(Of String, Integer)
    5. For Each kvp In MyDictionary
    6. Dim mystring As String = String.Format("{0} : {1}g", kvp.Key, kvp.Value)
    7. With ListView2.Items.Add(kvp.Key)
    8. .SubItems.Add(kvp.Value)
    9. End With
    10. Next
    11. If MyDictionary.ContainsKey(Name) Then
    12. 'Gibt es hier eine Möglichkeit mein Problem zu lösen?
    13. MyDictionary(Name) = Menge
    14. Updatelbx()
    15. Else
    16. MyDictionary.Add(Name, Menge)
    17. Updatelbx()
    18. End If
    Die ListViews sind irrelevant - die stellen nur den Inhalt der Dictionaries dar (jedes LV sollte ein eigenes haben). Heißt für dich: Immer Daten und Darstellung trennen.

    Dann ist die Zusammenfassung einfach:

    VB.NET-Quellcode

    1. For Each kvp In MyDict1 'Dict von LV 1 durchgehen
    2. If MyDict2.ContainsKey(kvp.Key) Then
    3. MyDict2(kvp.Key) += kvp.Value
    4. Else
    5. MyDict2.Add(kvp)
    6. End If
    7. Next


    In deinem Fall müsste in Zeile 16 schon folgendes ausreichen:
    MyDictionary(Name) += Int32.Parse(Menge)
    Gruß
    hal2000