Maison > développement back-end > Golang > Comment copier en profondeur et effacer des cartes dans Go ?

Comment copier en profondeur et effacer des cartes dans Go ?

Mary-Kate Olsen
Libérer: 2024-12-29 17:46:11
original
313 Les gens l'ont consulté

How to Deep Copy and Clear Maps in Go?

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
}
Copier après la connexion

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
}
Copier après la connexion

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)
    }
}
Copier après la connexion

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!

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