Création d'une carte associative dans Go: comment copier en profondeur et effacer le d'origine
dans Go, vous essayez de copier le contenu d'une carte appelée AMAP dans un autre nommé Asupermap. Par la suite, vous souhaitez effacer AMAP pour accepter de nouvelles valeurs dans la prochaine itération de boucle. Cependant, vous êtes confronté à la question de l'effacement de la carte sans également effacer sa référence dans ASUPERMAP.
Le problème avec les références
Votre code pseudo illustre que lorsque vous supprimez un élément d'AMAP à l'aide de la suppression (AMAP, X), la référence à cet élément est également supprimée à partir de ASUPERMAP. En effet, Asupermap [y] détient une référence à AMAP, et lorsque vous modifiez AMAP (dans ce cas, en supprimant un élément), vous modifiez en fait les données sous-jacentes auxquelles Asupermap pointe. Cela implique la création d'un nouvel objet de carte avec sa propre copie des données, plutôt que de simplement maintenir une référence à la carte d'origine.
Vous pouvez y parvenir en créant manuellement une boucle pour itérate sur la carte d'origine et ajoute chaque paire de valeurs clés à la nouvelle carte: pour k, v: = plage originalmap { newmap [k] = v }
En faisant cela, vous créez une nouvelle carte qui contient les mêmes données que la carte d'origine, mais les deux cartes sont des objets distincts avec leurs propres copies des données. Pour ce faire, vous pouvez utiliser la fonction de réinitialisation à partir du package Container / List:
pour quelque chose: = plage fruits { AMAP: = Make (map [String] Astruct) ASUPERMAP: = Make (map [String] Map [String] Astruct) pour x: = plage quelque chose { amap [x] = adata asupermap [y] = amap supprimer (amap, x) } // Copie profonde AMAP dans Newmap newmap: = make (map [string] asstruct) pour k, v: = plage amap { newmap [k] = v } // effacer l'AMAP d'origine conteneur / list.reset (AMAP) // Enregistrer la nouvelle carte Saveaspermap (Newmap) }
for k, v := range originalMap { newMap[k] = v }
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