Maison > développement back-end > Golang > Pourquoi l'ajout à une tranche trouvée dans une carte Go nécessite-t-il une réaffectation ?

Pourquoi l'ajout à une tranche trouvée dans une carte Go nécessite-t-il une réaffectation ?

Barbara Streisand
Libérer: 2024-11-05 06:41:02
original
412 Les gens l'ont consulté

Why Does Appending to a Slice Found in a Go Map Require Reassignment?

Ajouter directement à une tranche trouvée dans une carte Go

Ajouter directement à une tranche récupérée à partir d'une carte peut être une tâche délicate à comprendre. Examinons le problème et sa solution.

Dans le code fourni, une tentative d'ajout à une tranche stockée dans une carte a été effectuée :

<code class="go">mappedAminoAcid, ok := aminoAcidsToCodons[aminoAcid]
if ok {
    // NOT WORKING: mappedAminoAcid = append(mappedAminoAcid, codon)
    aminoAcidsToCodons[aminoAcid] = append(mappedAminoAcid, codon)
}</code>
Copier après la connexion

Cependant, cela a échoué car l'ajout renvoie une nouvelle tranche si le tableau sous-jacent doit croître. Par conséquent, il est nécessaire de réattribuer la nouvelle tranche à l'entrée de la carte.

Voici pourquoi l'affectation directe ne fonctionne pas :

Lorsqu'une tranche est renvoyée par une fonction ou accessible à partir d'une carte, c'est une copie de la tranche originale, pas un pointeur. Les modifications apportées à la copie ne sont pas reflétées dans l'original.

Par exemple, considérons une chaîne :

<code class="go">x := "foo"
y := x
y = "bar"
fmt.Println(x) // "foo" (unchanged)</code>
Copier après la connexion

Puisqu'une tranche nulle est acceptable comme argument initial à ajouter, le code peut être simplifié :

<code class="go">aminoAcidsToCodons := map[rune][]string{}
for codon, aminoAcid := range utils.CodonsToAminoAcid {
    aminoAcidsToCodons[aminoAcid] = append(aminoAcidsToCodons[aminoAcid], codon)
}</code>
Copier après la connexion

En résumé, lors d'un ajout à une tranche récupérée à partir d'une carte, il est crucial de se rappeler que la tranche renvoyée est une copie, et d'attribuer la nouvelle tranche revient à l'entrée de la carte.

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!

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