Copie approfondie et effacement de cartes dans Go
Lorsque vous travaillez avec des structures de données associatives, il est souvent nécessaire de créer une copie complète d'une carte et puis effacez l'original pour accepter de nouvelles valeurs. Dans Go, cependant, le simple fait d'attribuer la référence à une carte ne crée pas de copie complète, ce qui entraîne des problèmes d'effacement de la carte d'origine.
Le problème
Considérez le code suivant :
for something := range fruits { aMap := make(map[string]aStruct) aSuperMap := make(map[string]map[string]aStruct) for x := range something { aMap[x] = aData aSuperMap[y] = aMap delete(aMap, x) } // Save aSuperMap }
Dans ce code, nous essayons de créer une copie complète d'aMap dans aSuperMap, puis effaçons aMap afin qu'il puisse prendre de nouvelles valeurs. Cependant, supprimer un élément d'aMap le supprime également d'aSuperMap car les deux cartes font référence aux mêmes données sous-jacentes.
La solution
Pour créer une véritable copie complète d'un map dans Go, une boucle for doit être utilisée pour copier manuellement chaque paire clé et valeur de la carte d'origine vers la nouvelle map :
for k, v := range originalMap { newMap[k] = v }
Cela créera une nouvelle carte, newMap, indépendante de la carte d'origine, originalMap.
Effacer la carte d'origine
Après avoir créé une copie complète de la carte, la carte originale peut être effacée à l'aide de len() intégré function :
length := len(aMap) for i := 0; i < length; i++ { for key := range aMap { delete(aMap, key) } }
Cela supprimera tous les éléments de l'aMap tout en laissant le contenu de l'aSuperMap intact.
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!