Pengumpulan dan Penjumlahan Cekap Keratan Struktur di Golang
Di Golang, pengendalian data dengan cekap adalah penting. Apabila berurusan dengan kepingan struktur, tugas seperti mengumpulkan dan menjumlahkan boleh menjadi mencabar. Panduan ini menangani pendekatan yang cekap untuk mengumpulkan dan menjumlahkan sepotong struct berdasarkan medan tertentu.
Pernyataan Masalah
Pertimbangkan struct berikut:
type Register struct { id1 int id2 int id3 int id4 int id5 int id6 int id7 int id8 int money int }
Matlamatnya ialah untuk mengumpulkan daftar mengikut medan id1, id2, id3, id4, id5, id6, id7 dan id8 dan kemudian menjumlahkan medan wang yang berkaitan.
Penyelesaian
Penyelesaian yang disediakan melibatkan pemfaktoran semula sedikit jenis struct. Dengan mengekstrak medan kunci ke dalam struct yang berasingan, Key, kita boleh menggunakan kebolehbandingan struct dalam Golang.
Jenis Refactored
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 }
Pengumpulan dan Menjumlahkan
Untuk mencapai pengumpulan dan penjumlahan, kami membuat peta[Key]int. Kunci peta mewakili gabungan medan id, manakala nilai mewakili jumlah wang untuk daftar dengan kunci yang sama.
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 }
Output
The peta menyediakan perwakilan berkumpulan dan dijumlahkan bagi daftar.
map[{345 0 0 0 0 0 0 0}:2500 {345 140 0 0 0 0 0 0}:4000 {0 0 999 0 0 0 0 0}:3000]
Output Dipertingkat
Untuk kebolehbacaan yang lebih baik, kami boleh memformatkan output seperti berikut:
fmt.Println("Nice output:") for k, v := range m { fmt.Printf("%+3v: %d\n", k, v) }
Hasil
Nice output: {id1:345 id2: 0 id3: 0 id4: 0 id5: 0 id6: 0 id7: 0 id8: 0}: 2500 {id1:345 id2:140 id3: 0 id4: 0 id5: 0 id6: 0 id7: 0 id8: 0}: 4000 {id1: 0 id2: 0 id3:999 id4: 0 id5: 0 id6: 0 id7: 0 id8: 0}: 3000
Kelebihan
Pendekatan ini menawarkan beberapa kelebihan:
Atas ialah kandungan terperinci Bagaimanakah saya boleh mengumpulkan dan menjumlahkan sepotong struct dengan cekap berdasarkan medan tertentu di Golang?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!