Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk Mengubah Suai Nilai Slice dalam Peta dalam Go?

Bagaimana untuk Mengubah Suai Nilai Slice dalam Peta dalam Go?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-11-05 01:57:02604semak imbas

How to Modify Slice Values in a Map in Go?

Mengakses Nilai Slice dalam Peta

Apabila bekerja dengan peta yang mengandungi kepingan sebagai nilai, adalah penting untuk memahami implikasi penambahan terus pada kepingan yang dikembalikan oleh pengakses peta. Seperti yang ditunjukkan dalam contoh di bawah, hanya memberikan kepingan yang dilampirkan kepada kepingan yang dikembalikan tidak mengubah suai nilai asas dalam peta.

<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>

Isu ini berpunca daripada fakta bahawa append mengembalikan kepingan baharu jika yang mendasari array perlu berkembang. Oleh itu, kod berikut tidak berfungsi seperti yang dimaksudkan:

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

Tingkah laku ini serupa dengan rentetan. Contohnya:

<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>

Untuk menyelesaikan isu ini dan mengubah suai nilai asas peta, kepingan yang dilampirkan mesti ditetapkan semula kepada entri peta yang sepadan. Nasib baik, pendekatan yang lebih mudah wujud: ambil kesempatan daripada fakta bahawa sepotong nil ialah hujah pertama yang sah untuk ditambahkan.

<code class="go">aminoAcidsToCodons[aminoAcid] = append(aminoAcidsToCodons[aminoAcid], codon)</code>

Atas ialah kandungan terperinci Bagaimana untuk Mengubah Suai Nilai Slice dalam Peta dalam Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn