Mengapa Penambahan Langsung pada Slice dalam Go Map Tidak Berfungsi Seperti Yang Dijangkakan?

Mary-Kate Olsen
Lepaskan: 2024-11-05 22:42:02
asal
162 orang telah melayarinya

Why Doesn't Directly Appending to a Slice in a Go Map Work as Expected?

Melampirkan Terus pada Slice dalam Peta Go

Dalam Go, anda mungkin menghadapi senario di mana anda bertujuan untuk mengekalkan peta yang mengaitkan rune dengan kepingan dan tambahkan elemen pada kepingan yang sepadan. Walau bagaimanapun, penambahan terus pada kepingan yang dikembalikan dengan mengakses peta (cth., mappedAminoAcid = append(mappedAminoAcid, kodon)) tidak berfungsi seperti yang diharapkan. Sebaliknya, anda perlu menggunakan bentuk capaian kata kerja (aminoAcidsToCodons[aminoAcid] = append(mappedAminoAcid, codon)).

Tingkah laku ini berpunca daripada cara Go mengendalikan kepingan. Apabila anda menambah pada kepingan menggunakan fungsi tambah, ia mengembalikan kepingan baharu jika tatasusunan asas perlu berkembang untuk menampung elemen baharu. Oleh itu, untuk mengemas kini kepingan yang disimpan dalam peta, anda perlu menetapkan semula kepingan baharu pada peta, sama seperti yang anda lakukan dengan rentetan.

Contohnya:

<code class="go">var x map[string]string
x["a"] = "foo"

y := x["a"]
y = "bar"

// x["a"] is still "foo"</code>
Salin selepas log masuk

Untuk memudahkan kod anda, anda boleh memanfaatkan fakta bahawa kepingan nil ialah hujah pertama yang sah untuk tambahan:

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

Dengan memahami cara kepingan berfungsi dalam Go, anda boleh mengendalikan senario yang melibatkan penambahan kepingan dalam peta dengan berkesan.

Atas ialah kandungan terperinci Mengapa Penambahan Langsung pada Slice dalam Go Map Tidak Berfungsi Seperti Yang Dijangkakan?. 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
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!