Heim >Backend-Entwicklung >Golang >Wie füge ich mehrere Karten in Golang zusammen und gehe mit doppelten Werten um?

Wie füge ich mehrere Karten in Golang zusammen und gehe mit doppelten Werten um?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-10-29 09:37:30916Durchsuche

How to Merge Multiple Maps in Golang and Handle Duplicate Values?

Karten in Golang zusammenführen

Sie möchten mehrere Karten kombinieren, z. B. map1 = [id: id_1, val: val_1], map2 = [id: id_2, val: val_2] und map3 = [id: id_1, val: val_3] in eine einzige Ergebniskarte. Eine schlüsselbasierte Zusammenführung ist erforderlich, was zu einer Ergebniszuordnung wie dieser führt:

result_map = [id: id_1 val: {val_1, val_3}, id: id_2 var: {val_2}]

Eine einfache Zusammenführung

Sie können Karten problemlos zusammenführen. Da die Ergebniszuordnung jedoch mehrere Werte für denselben Schlüssel enthalten kann, ist es ratsam, einen Slice als Werttyp zu verwenden, z. B. map[string][]string.

Bei der Zusammenführungsoperation werden die Zuordnungen durchlaufen zusammengeführt werden und dann Werte aus Quellkarten an Slices angehängt werden, die demselben Schlüssel in der Ergebniskarte zugeordnet sind. Denken Sie daran, die erweiterten Slices wieder den Schlüsseln der Ergebniskarte zuzuweisen.

Hier ist ein grundlegender Ansatz:

<code class="go">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
}</code>

Duplikate vermeiden

Die oben genannte merge()-Methode ermöglicht doppelte Einträge . Wenn beispielsweise „id_1“: „val_1“ in mehreren Eingabekarten vorkommt, wird es in der Zielkarte wiederholt, z. B. „id_1“: [„val_1“, „val_1“, „val_x“]. Um Duplikate zu eliminieren und sicherzustellen, dass „id_1“: „val_1“ nur einmal vorkommt, ist eine zusätzliche Prüfung erforderlich:

<code class="go">func merge(ms ...map[string]string) map[string][]string {
    res := map[string][]string{}
    for _, m := range ms {
    srcMap:
        for k, v := range m {
            for _, v2 := range res[k] {
                if v == v2 {
                    continue srcMap
                }
            }
            res[k] = append(res[k], v)
        }
    }
    return res
}</code>

Das obige ist der detaillierte Inhalt vonWie füge ich mehrere Karten in Golang zusammen und gehe mit doppelten Werten um?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn