Mengumpul dan Menjumlahkan Sepotong Struktur dalam Go
Dalam senario ini, anda bertujuan untuk mengumpulkan sepotong struct berdasarkan lapan medan tertentu dan jumlahkan medan integer tambahan, serupa dengan pertanyaan SQL. Untuk mencapai matlamat ini, anda pada mulanya mempertimbangkan untuk mencipta fungsi Equal untuk membandingkan struct dan menyemak secara berulang sama ada setiap item berada dalam jadual cincang, menambah atau menjumlahkan medan dengan sewajarnya.
Walaupun pendekatan anda sah, terdapat penyelesaian alternatif yang menawarkan kecekapan dan kesederhanaan. Faktorkan semula jenis anda supaya medan kekunci (id1-id8) membentuk struktur berasingan, Kekunci. Ini membolehkan anda menggunakan Kekunci sebagai kunci peta, kerana struct adalah setanding dalam Go.
Berikut ialah definisi jenis yang diubah suai:
<code class="go">type Key struct { id1 int id2 int id3 int id4 int id5 int id6 int id7 int id8 int } type Register struct { key Key money int }</code>
Untuk mengumpulkan dan mengira jumlah, gunakan peta[ Key]int. Gunakan Register.key sebagai kunci peta untuk mengumpul semua daftar dengan kekunci (id) yang sama:
<code class="go">regs := []*Register{ {Key{id1: 345}, 1500}, {Key{id1: 345, id2: 140}, 2700}, {Key{id1: 345, id2: 140}, 1300}, {Key{id1: 345}, 1000}, {Key{id3: 999}, 1000}, {Key{id3: 999}, 2000}, } // calculate sum: m := map[Key]int{} for _, v := range regs { m[v.key] += v.money }</code>
Penyelesaian ini menyediakan cara yang mudah dan cekap untuk mengumpulkan dan menjumlahkan kepingan struct yang disediakan. Tiada perpustakaan tambahan atau mekanisme lelaran yang kompleks diperlukan.
Atas ialah kandungan terperinci Bagaimana untuk Mengumpul dan Menjumlahkan Sepotong Struktur dengan Cekap dalam Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!