Maison > développement back-end > Golang > Pourquoi l'ajout direct à une tranche d'une carte Go ne fonctionne-t-il pas comme prévu ?

Pourquoi l'ajout direct à une tranche d'une carte Go ne fonctionne-t-il pas comme prévu ?

Mary-Kate Olsen
Libérer: 2024-11-05 22:42:02
original
258 Les gens l'ont consulté

Why Doesn't Directly Appending to a Slice in a Go Map Work as Expected?

Ajout direct à une tranche dans une carte Go

Dans Go, vous pourriez rencontrer un scénario dans lequel vous souhaitez maintenir une carte qui associe runes avec des tranches et ajouter des éléments aux tranches correspondantes. Cependant, l'ajout direct à la tranche renvoyée en accédant à la carte (par exemple, mappedAminoAcid = append(mappedAminoAcid, codon)) ne fonctionne pas comme prévu. Au lieu de cela, vous devez utiliser la forme d'accès détaillée (aminoAcidsToCodons[aminoAcid] = append(mappedAminoAcid, codon)).

Ce comportement découle de la façon dont Go gère les tranches. Lorsque vous ajoutez à une tranche à l'aide de la fonction append, elle renvoie une nouvelle tranche si le tableau sous-jacent doit s'agrandir pour accueillir le nouvel élément. Par conséquent, pour mettre à jour la tranche stockée dans la carte, vous devez réattribuer la nouvelle tranche à la carte, comme vous le feriez avec des chaînes.

Par exemple :

<code class="go">var x map[string]string
x["a"] = "foo"

y := x["a"]
y = "bar"

// x["a"] is still "foo"</code>
Copier après la connexion

Pour simplifier votre code, vous pouvez tirer parti du fait qu'une tranche nulle est un premier argument valide pour l'ajout :

<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 comprenant comment les tranches fonctionnent dans Go, vous pouvez gérer efficacement les scénarios impliquant l'ajout de tranches dans les cartes.

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