Heim  >  Artikel  >  Backend-Entwicklung  >  Wie ändere ich Slice-Werte in einer Karte in Go?

Wie ändere ich Slice-Werte in einer Karte in Go?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-11-05 01:57:02551Durchsuche

How to Modify Slice Values in a Map in Go?

Auf Slice-Werte in einer Karte zugreifen

Beim Arbeiten mit Karten, die Slices als Werte enthalten, ist es wichtig, die Auswirkungen des direkten Anhängens zu verstehen das vom Map-Accessor zurückgegebene Slice. Wie im Beispiel unten gezeigt, ändert die einfache Zuweisung des angehängten Slice zum zurückgegebenen Slice nicht den zugrunde liegenden Wert in der Karte.

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

Das Problem ergibt sich aus der Tatsache, dass „append“ ein neues Slice zurückgibt, wenn der zugrunde liegende Array muss wachsen. Daher funktioniert der folgende Code nicht wie vorgesehen:

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

Dieses Verhalten ähnelt dem von Zeichenfolgen. Zum Beispiel:

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

Um dieses Problem zu beheben und den zugrunde liegenden Wert der Karte zu ändern, muss das angehängte Segment dem entsprechenden Karteneintrag neu zugewiesen werden. Glücklicherweise gibt es einen einfacheren Ansatz: Nutzen Sie die Tatsache, dass ein Null-Slice ein gültiges erstes Argument für append ist.

<code class="go">aminoAcidsToCodons[aminoAcid] = append(aminoAcidsToCodons[aminoAcid], codon)</code>

Das obige ist der detaillierte Inhalt vonWie ändere ich Slice-Werte in einer Karte in Go?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn