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.
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