Maison > développement back-end > Golang > le corps du texte

Comment modifier les valeurs de tranche dans une carte dans Go ?

Mary-Kate Olsen
Libérer: 2024-11-05 01:57:02
original
548 Les gens l'ont consulté

How to Modify Slice Values in a Map in Go?

Accès aux valeurs de tranche dans une carte

Lorsque vous travaillez avec des cartes qui contiennent des tranches comme valeurs, il est crucial de comprendre les implications de l'ajout direct à la tranche renvoyée par l'accesseur de carte. Comme le montre l'exemple ci-dessous, le simple fait d'attribuer la tranche ajoutée à la tranche renvoyée ne modifie pas la valeur sous-jacente dans la carte.

<code class="go">var aminoAcidsToCodons map[rune][]string
for codon, aminoAcid := range utils.CodonsToAminoAcid {
    mappedAminoAcid := aminoAcidsToCodons[aminoAcid] // Return slice by value

    if ok := len(mappedAminoAcid) > 0; ok { // Check if slice is nil
        mappedAminoAcid = append(mappedAminoAcid, codon) // Create a new slice
        aminoAcidsToCodons[aminoAcid] = mappedAminoAcid // Reset map value
    } else {
        aminoAcidsToCodons[aminoAcid] = []string{codon}
    }
}</code>
Copier après la connexion

Le problème vient du fait que l'ajout renvoie une nouvelle tranche si la tranche sous-jacente le tableau doit croître. Par conséquent, le code suivant ne fonctionne pas comme prévu :

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

Ce comportement est similaire à celui des chaînes. Par exemple :

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

y := x["a"] // Copy string by value
y = "bar"

// x["a"] is still "foo" since a new string is created in y</code>
Copier après la connexion

Pour résoudre ce problème et modifier la valeur sous-jacente de la carte, la tranche ajoutée doit être réaffectée à l'entrée de carte correspondante. Heureusement, une approche plus simple existe : profitez du fait qu'une tranche nulle est un premier argument valide pour append.

<code class="go">aminoAcidsToCodons[aminoAcid] = append(aminoAcidsToCodons[aminoAcid], codon)</code>
Copier après la connexion

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
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!