Bagaimanakah saya boleh mengumpulkan dan menjumlahkan kepingan struct dalam Go menggunakan peta dan struct utama?

Patricia Arquette
Lepaskan: 2024-11-01 18:04:02
asal
686 orang telah melayarinya

How can I group and sum slices of structs in Go using maps and key structs?

Mengumpul dan Menjumlahkan Kepingan Struktur dalam Go

Apabila menganalisis data, selalunya perlu untuk mengumpulkan elemen yang serupa dan mengira nilai agregat untuk setiap kumpulan. Dalam LINQ, ini boleh dicapai dengan cekap menggunakan pertanyaan dalam memori. Go menyediakan cara yang serba boleh untuk melaksanakan operasi serupa menggunakan peta dan penutupan.

Pertimbangkan sekeping struct Daftar, di mana setiap struct mengandungi berbilang pengecam unik (id1 hingga id8) dan nilai integer (wang). Matlamatnya adalah untuk mengumpulkan daftar ini mengikut pengecam unik mereka dan menjumlahkan nilai wang yang sepadan untuk setiap kumpulan.

Penghimpunan dan Penjumlahan Manual:

Satu pendekatan ialah mencipta fungsi Equal tersuai untuk membandingkan struct Daftar berdasarkan pengecamnya. Kemudian, ulangi keping, semak sama ada setiap daftar sudah ada dalam jadual cincang. Jika ya, nilai wang akan dinaikkan. Jika tidak, entri baharu ditambahkan pada jadual cincang yang mengandungi Daftar dan nilai wang permulaan 0.

Menggunakan Struktur dan Peta Utama:

Peta Go menyediakan cara yang lebih cekap untuk melaksanakan operasi pengumpulan dan penjumlahan. Dengan mentakrifkan struct Kunci berasingan yang mengandungi hanya pengecam unik (id1 hingga id8), anda boleh menggunakannya sebagai kunci unik untuk peta. Nilai dalam peta boleh menjadi jumlah nilai wang untuk daftar dengan gabungan pengecam yang sama.

Untuk melaksanakan pendekatan ini:

  • Tentukan struct Kunci dan Daftar:
<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
  • Isi peta menggunakan Kekunci sebagai kunci dan nilai wang awal sebagai nilai:
<code class="go">m := map[Key]int{}</code>
Salin selepas log masuk
  • Lelaran di atas daftar, menambahkannya pada peta atau mengemas kini nilai wang yang sepadan:
<code class="go">for _, v := range regs {
    m[v.key] += v.money
}</code>
Salin selepas log masuk

Output dan Pemformatan:

Untuk memaparkan keputusan dengan baik, anda boleh memformat Struktur kunci dengan semua medannya diawali dengan id. Contohnya:

<code class="go">fmt.Println("Nice output:")
for k, v := range m {
    fmt.Printf("%+3v: %d\n", k, v)
}</code>
Salin selepas log masuk

Kesimpulan:

Menggunakan peta dengan struct utama ialah cara yang cekap dan fleksibel untuk mengumpulkan dan menjumlahkan kepingan struct dalam Go. Ia menyediakan alternatif berprestasi kepada pengumpulan dan penjumlahan manual, terutamanya apabila berurusan dengan set data yang besar.

Atas ialah kandungan terperinci Bagaimanakah saya boleh mengumpulkan dan menjumlahkan kepingan struct dalam Go menggunakan peta dan struct utama?. 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!