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

Barbara Streisand
Lepaskan: 2024-11-05 06:41:02
asal
362 orang telah melayarinya

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>
Salin selepas log masuk

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>
Salin selepas log masuk

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>
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan