Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Mengapakah Melampirkan Pada Slice yang Ditemui dalam Peta Go Memerlukan Penugasan Semula?

Mengapakah Melampirkan Pada Slice yang Ditemui dalam Peta Go Memerlukan Penugasan Semula?

Barbara Streisand
Barbara Streisandasal
2024-11-05 06:41:02311semak imbas

Why Does Appending to a Slice Found in a Go Map Require Reassignment?

Melampirkan Terus pada Slice Found in a Go Map

Melampirkan terus pada hirisan yang diambil daripada peta boleh menjadi tugas yang sukar untuk difahami. Mari kita selami isu dan penyelesaiannya.

Dalam kod yang disediakan, percubaan telah dibuat untuk menambah pada kepingan yang disimpan dalam peta:

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

Walau bagaimanapun, ini gagal kerana append mengembalikan kepingan baharu jika tatasusunan asas perlu berkembang. Oleh itu, adalah perlu untuk menetapkan semula kepingan baharu kepada entri peta.

Inilah sebabnya pemberian terus tidak berfungsi:

Apabila hirisan dikembalikan oleh fungsi atau diakses daripada peta, ia adalah salinan hirisan asal, bukan penunjuk. Pengubahsuaian yang dibuat pada salinan tidak ditunjukkan dalam yang asal.

Sebagai contoh, pertimbangkan rentetan:

<code class="go">x := "foo"
y := x
y = "bar"
fmt.Println(x) // "foo" (unchanged)</code>

Memandangkan hirisan nol boleh diterima sebagai hujah awal untuk ditambahkan, kod boleh dipermudahkan:

<code class="go">aminoAcidsToCodons := map[rune][]string{}
for codon, aminoAcid := range utils.CodonsToAminoAcid {
    aminoAcidsToCodons[aminoAcid] = append(aminoAcidsToCodons[aminoAcid], codon)
}</code>

Ringkasnya, apabila melampirkan hirisan yang diambil daripada peta, adalah penting untuk diingat bahawa kepingan yang dikembalikan ialah salinan dan untuk menetapkan semula kepingan baharu kepada entri peta.

Atas ialah kandungan terperinci Mengapakah Melampirkan Pada Slice yang Ditemui dalam Peta Go Memerlukan Penugasan Semula?. 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