首頁 > 後端開發 > Golang > 主體

如何在 Go 中修改 Map 中的切片值?

Mary-Kate Olsen
發布: 2024-11-05 01:57:02
原創
588 人瀏覽過

How to Modify Slice Values in a Map in Go?

訪問地圖中的切片值

使用包含切片作為值的地圖時,了解直接附加到的含​​義至關重要地圖訪問器返回的切片。如下面的範例所示,簡單地將附加切片指派給傳回的切片不會修改映射中的基礎值。

<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>
登入後複製

問題源自於以下事實:如果底層值是附加的,則附加會傳回一個新切片數組需要成長。因此,以下程式碼無法如預期般運作:

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

此行為與字串類似。例如:

<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>
登入後複製

要解決此問題並修改映射的基礎值,必須將附加切片重新指派給對應的映射條目。幸運的是,有一個更簡單的方法:利用 nil 切片是追加的有效第一個參數。

<code class="go">aminoAcidsToCodons[aminoAcid] = append(aminoAcidsToCodons[aminoAcid], codon)</code>
登入後複製

以上是如何在 Go 中修改 Map 中的切片值?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板