"Si un ouvrier veut bien faire son travail, il doit d'abord affûter ses outils." - Confucius, "Les Entretiens de Confucius. Lu Linggong"
Page de garde > La programmation > Comment fusionner plusieurs cartes dans Golang tout en évitant les valeurs en double ?

Comment fusionner plusieurs cartes dans Golang tout en évitant les valeurs en double ?

Publié le 2024-11-08
Parcourir:227

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

Fusionner des cartes dans Golang

Problème :
Fusionner plusieurs cartes, en préservant les valeurs associées à la même clé sur toutes les cartes.

Approche initiale :

Le code fourni tente de fusionner des cartes en itérant sur chaque carte, en ajoutant des valeurs à la carte de résultat en fonction des clés correspondantes. Cependant, cette approche ne gère pas les valeurs en double dans la carte de résultats.

Fusion simple :

Une fonction de fusion révisée peut être implémentée pour gérer les doublons en ajoutant des valeurs aux tranches. associé aux clés dans la carte de résultat.

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
}

Éviter les doublons :

Pour éviter les doublons dans la carte de résultats, la fonction de fusion peut être modifiée pour vérifier les valeurs existantes avant d'ajouter :

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
}

Test :

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)

Sortie :

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

Cela démontre la fusion des cartes, en préservant les valeurs associées à la même clé et en évitant les doublons.

Dernier tutoriel Plus>

Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.

Copyright© 2022 湘ICP备2022001581号-3