Maison >développement back-end >Golang >Comment copier en profondeur une carte Go sans affecter l'original ?

Comment copier en profondeur une carte Go sans affecter l'original ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-12-25 16:18:11218parcourir

How to Deep Copy a Go Map Without Affecting the Original?

Copier en profondeur une carte sans corrompre l'original

Dans Go, tenter de copier une carte en attribuant une référence comme aSuperMap[y] = aMap peut entraîner des conséquences inattendues. Pour créer une carte associative sans affecter l'originale, une copie approfondie est nécessaire.

Le problème

L'exemple fourni tente de copier le contenu d'aMap dans aSuperMap, puis d'effacer une carte. Cependant, la suppression d'une entrée d'aMap (delete(aMap, x)) supprime également sa référence d'aSuperMap. Il en résulte que la supercarte contient des données en double ou devient incohérente.

Solution : copie approfondie

Pour éviter de modifier la carte d'origine lors de modifications de la copie, la copie approfondie est utilisé. Dans une boucle for :

for k, v := range originalMap {
  newMap[k] = v
}

Chaque paire clé-valeur de originalMap est copiée individuellement dans newMap. Ce processus crée une nouvelle carte indépendante qui n'est pas liée à l'originale. La carte originale peut ensuite être effacée sans affecter la copie.

Exemple

L'exemple suivant montre la copie approfondie d'une carte :

originalMap := map[string]int{"one": 1, "two": 2}

// Deep copy originalMap into newMap
newMap := make(map[string]int)
for k, v := range originalMap {
  newMap[k] = v
}

// Clear the original map
originalMap = make(map[string]int)

// Verify that newMap is independent of originalMap
newMap["three"] = 3
fmt.Println(newMap) // {one: 1, two: 2, three: 3}
fmt.Println(originalMap) // {}

Dans Dans cet exemple, la copie approfondie permet de modifier et d'étendre newMap indépendamment de originalMap, garantissant ainsi le maintien de l'intégrité des deux cartes.

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