直接追加到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中文網其他相關文章!