首頁  >  文章  >  後端開發  >  為什麼直接附加到 Go Map 的切片不能如預期般運作?

為什麼直接附加到 Go Map 的切片不能如預期般運作?

Mary-Kate Olsen
Mary-Kate Olsen原創
2024-11-05 22:42:02148瀏覽

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

直接追加到Go Map 中的切片

在Go 中,你可能會遇到這樣的場景:你的目標是維護一個關聯的Map帶有切片的符文並將元素附加到對應的切片。然而,直接附加到透過存取映射返回的切片(例如,mappedAminoAcid =append(mappedAminoAcid, codon))並不能如預期般運作。相反,您需要使用詳細的存取形式 (aminoAcidsToCodons[aminoAcid] = append(mappedAminoAcid, codon))。

此行為源自於 Go 處理切片的方式。當您使用追加函數追加到切片時,如果底層陣列需要增長以容納新元素,它會傳回一個新切片。因此,要更新儲存在地圖中的切片,您需要將新切片分配回地圖,就像使用字串一樣。

例如:

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

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

// x["a"] is still "foo"</code>

簡化在您的程式碼中,您可以利用nil 切片是追加的有效第一個參數:

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

透過了解切片在Go 中的工作原理,您可以有效處理涉及在映射中追加切片的場景。

以上是為什麼直接附加到 Go Map 的切片不能如預期般運作?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn