Rumah >pembangunan bahagian belakang >Golang >Bagaimana untuk mengumpulkan dan menjumlahkan kepingan struktur dalam Go?

Bagaimana untuk mengumpulkan dan menjumlahkan kepingan struktur dalam Go?

Susan Sarandon
Susan Sarandonasal
2024-11-02 04:40:02811semak imbas

How to Group and Sum Slices of Structs in Go?

Mengumpul dan Menjumlahkan Kepingan Struktur dalam Go

Masalahnya

Dalam pengaturcaraan, selalunya perlu melaksanakan tugas manipulasi data pada dalam memori koleksi. Satu operasi biasa ialah mengumpulkan data ke dalam kategori dan menjumlahkan nilai dalam setiap kategori. Masalah ini sering dihadapi apabila bekerja dengan kepingan struct.

Cabarannya

Pertimbangkan kepingan struct berikut:

<code class="go">type Register struct {
    id1 int
    id2 int
    id3 int
    id4 int
    id5 int
    id6 int
    id7 int
    id8 int
    money int
}</code>

Tugasnya adalah untuk mengumpulkan elemen dalam kepingan dengan lapan medan pertama (medan id) dan jumlahkan medan wang untuk setiap kumpulan. Operasi ini serupa dengan pertanyaan SQL:

<code class="sql">SELECT SUM(money) FROM Registers GROUP BY id1, id2, id3, id4, id5, id6, id7, id8;</code>

Penyelesaian

Terdapat beberapa cara untuk mendekati masalah ini dalam Go. Satu pilihan ialah menggunakan jadual cincang untuk menjejaki jumlah bagi setiap gabungan unik medan id.

  1. Buat Jenis Kekunci: Tentukan struct baharu yang dipanggil Kekunci yang mengandungi hanya medan id. Struktur ini akan berfungsi sebagai pengecam unik untuk setiap kumpulan.
  2. Ubah Daftar: Buat kepingan baharu di mana setiap elemen ialah struct dengan medan Kunci dan medan wang. Medan Kunci akan ditetapkan kepada kunci yang sepadan untuk elemen dan medan wang akan kekal tidak berubah.
  3. Mulakan Peta: Cipta peta yang memetakan nilai Kunci kepada jumlah integer.
  4. Lelar dan Terkumpul: Lelaran di atas kepingan yang diubah. Untuk setiap elemen, dapatkan semula jumlah daripada peta menggunakan Kunci elemen, tambah medan wang elemen dan simpan semula jumlah yang dikemas kini ke dalam peta.

Kod berikut menunjukkan pendekatan ini:

<code class="go">type Key struct {
    id1 int
    id2 int
    id3 int
    id4 int
    id5 int
    id6 int
    id7 int
    id8 int
}

func groupAndSum(registers []*Register) map[Key]int {
    m := map[Key]int{}
    for _, r := range registers {
        key := Key{
            id1: r.id1,
            id2: r.id2,
            id3: r.id3,
            id4: r.id4,
            id5: r.id5,
            id6: r.id6,
            id7: r.id7,
            id8: r.id8,
        }
        m[key] += r.money
    }
    return m
}</code>

Penyelesaian ini menyediakan cara yang cekap untuk mengumpulkan dan menjumlahkan struktur berdasarkan kuncinya.

Atas ialah kandungan terperinci Bagaimana untuk mengumpulkan dan menjumlahkan kepingan struktur dalam Go?. 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