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