Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimanakah saya boleh mengumpulkan dan menjumlahkan kepingan struct dalam Go menggunakan peta dan struct utama?

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

Patricia Arquette
Patricia Arquetteasal
2024-11-01 18:04:02687semak imbas

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>
  • Isi peta menggunakan Kekunci sebagai kunci dan nilai wang awal sebagai nilai:
<code class="go">m := map[Key]int{}</code>
  • 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>

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>

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!

Kenyataan:
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