Maison >développement back-end >Golang >Comment copier en profondeur une carte Go sans affecter l'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!