Maison >développement back-end >Golang >Comment fusionner plusieurs cartes dans Golang et gérer les valeurs en double ?

Comment fusionner plusieurs cartes dans Golang et gérer les valeurs en double ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-10-29 09:37:30916parcourir

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

Fusionner des cartes dans Golang

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}]

Une fusion simple

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>

Éviter les doublons

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn