首页 > 后端开发 > Golang > 为什么直接附加到 Go Map 中的切片不能按预期工作?

为什么直接附加到 Go Map 中的切片不能按预期工作?

Mary-Kate Olsen
发布: 2024-11-05 22:42:02
原创
258 人浏览过

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中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板