Maison >développement back-end >Golang >Comment fusionner plusieurs cartes dans Golang et gérer les valeurs en double ?
Vous souhaitez combiner plusieurs cartes, telles que map1 = [id: id_1, val: val_1], map2 = [id: id_2, val: val_2] et map3 = [id: id_1, val: val_3], en une seule carte de résultats. Une fusion basée sur les clés est requise, ce qui donne une carte de résultats comme celle-ci :
result_map = [id : id_1 val : {val_1, val_3}, id : id_2 var : {val_2}]
Vous pouvez fusionner des cartes sans problème. Cependant, étant donné que la carte de résultat peut contenir plusieurs valeurs pour la même clé, il est judicieux d'utiliser une tranche comme type de valeur, par exemple map[string][]string.
L'opération de fusion implique une itération sur les cartes pour être fusionné, puis en ajoutant les valeurs des cartes sources aux tranches associées à la même clé dans la carte résultat. N'oubliez pas de réaffecter les tranches étendues aux clés de la carte de résultats.
Voici une approche de base :
<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>
La méthode merge() susmentionnée autorise les entrées en double . Par exemple, si "id_1": "val_1" apparaît dans plusieurs cartes d'entrée, il sera répété dans la carte cible, par exemple "id_1": ["val_1", "val_1", "val_x"]. Pour éliminer les doublons et garantir que "id_1" : "val_1" n'apparaisse qu'une seule fois, une vérification supplémentaire est requise :
<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>
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!