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

Comment copier en profondeur une carte Go et effacer l'original sans affecter la copie ?

Susan Sarandon
Libérer: 2024-12-30 13:05:09
original
497 Les gens l'ont consulté

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

Création d'une carte associative dans Go : comment copier en profondeur et effacer l'original

Dans Go, vous essayez de copier le contenu d'une carte appelée aMap dans une autre carte nommée aSuperMap. Par la suite, vous souhaitez effacer aMap pour accepter de nouvelles valeurs lors de la prochaine itération de boucle. Cependant, vous êtes confronté au problème d'effacer la carte sans également effacer sa référence dans aSuperMap.

Le problème avec les références

Votre pseudo-code illustre que lorsque vous supprimez un élément d'aMap à l'aide de delete(aMap, x), la référence à cet élément est également supprimée d'aSuperMap. En effet, aSuperMap[y] contient 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 vers lesquelles pointe aSuperMap.

Copie approfondie de cartes

Pour véritablement créer une carte associative dans Go, vous devez effectuer une copie approfondie de la carte. Cela implique de créer un nouvel objet cartographique avec sa propre copie des données, plutôt que de simplement conserver une référence à la carte originale.

Vous pouvez y parvenir en créant manuellement une boucle for qui parcourt la carte originale et ajoute chaque paire clé-valeur à la nouvelle carte :

for k, v := range originalMap {
    newMap[k] = v
}
Copier après la connexion

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 de le data.

Effacer la carte originale

Une fois que vous avez une copie complète de la carte, vous pouvez effacer la carte originale sans affecter la nouvelle carte. Pour ce faire, vous pouvez utiliser la fonction de réinitialisation du package conteneur/list :

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)
    }

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

    // Clear the original aMap
    container/list.Reset(aMap)

    // Save the new map
    saveASuperMap(newMap)
}
Copier après la connexion

En suivant ces étapes, vous pouvez réussir à créer une carte associative dans Go, effectuer une copie complète de la carte pour préserver les données d'origine et effacez la carte d'origine pour accepter de nouvelles valeurs dans la prochaine itération de boucle.

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal