Heim >Backend-Entwicklung >Golang >Wie füge ich mehrere Karten in Golang zusammen und gehe mit doppelten Werten um?
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}]
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>
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!