Bagaimana untuk Mengumpul dan Menjumlahkan Sepotong Struktur dengan Cekap dalam Go?

Linda Hamilton
Lepaskan: 2024-11-05 07:25:02
asal
719 orang telah melayarinya

How to Efficiently Group and Sum a Slice of Structs in Go?

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

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

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!

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