„Wenn ein Arbeiter seine Arbeit gut machen will, muss er zuerst seine Werkzeuge schärfen.“ – Konfuzius, „Die Gespräche des Konfuzius. Lu Linggong“
Titelseite > Programmierung > Wie füge ich mehrere Karten in Golang zusammen und vermeide gleichzeitig doppelte Werte?

Wie füge ich mehrere Karten in Golang zusammen und vermeide gleichzeitig doppelte Werte?

Veröffentlicht am 08.11.2024
Durchsuche:736

How to Merge Multiple Maps in Golang While Avoiding Duplicate Values?

Karten in Golang zusammenführen

Problem:
Mehrere Karten zusammenführen, dabei Werte beibehalten, die kartenübergreifend mit demselben Schlüssel verknüpft sind.

Erster Ansatz:

Der bereitgestellte Code versucht, Karten zusammenzuführen, indem er über jede Karte iteriert und Werte zur Ergebniskarte basierend auf übereinstimmenden Schlüsseln hinzufügt. Dieser Ansatz verarbeitet jedoch keine doppelten Werte innerhalb der Ergebniskarte.

Einfaches Zusammenführen:

Eine überarbeitete Zusammenführungsfunktion kann implementiert werden, um Duplikate durch Anhängen von Werten an Slices zu verarbeiten mit Schlüsseln in der Ergebniszuordnung verknüpft.

func merge(ms ...map[string]string) map[string][]string {
    res := map[string][]string{}
    for _, m := range ms {
        for k, v := range m {
            res[k] = append(res[k], v)
        }
    }
    return res
}

Duplikate vermeiden:

Um Duplikate in der Ergebniskarte zu vermeiden, kann die Zusammenführungsfunktion so geändert werden, dass vor dem Anhängen nach vorhandenen Werten gesucht wird:

func merge(ms ...map[string]string) map[string][]string {
    res := map[string][]string{}
    for _, m := range ms {
    srcMap:
        for k, v := range m {
            // Check if (k,v) was added before:
            for _, v2 := range res[k] {
                if v == v2 {
                    continue srcMap
                }
            }
            res[k] = append(res[k], v)
        }
    }
    return res
}

Testing:

m1 := map[string]string{"id_1": "val_1"}
m2 := map[string]string{"id_2": "val_2", "id_1": "val_1"}
m3 := map[string]string{"id_1": "val_3"}

res := merge(m1, m2, m3)
fmt.Println(res)

Ausgabe:

map[id_1:[val_1 val_3] id_2:[val_2]]

Dies demonstriert die Zusammenführung von Karten, wobei Werte, die mit demselben Schlüssel verknüpft sind, erhalten bleiben und Duplikate vermieden werden.

Neuestes Tutorial Mehr>

Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.

Copyright© 2022 湘ICP备2022001581号-3