首頁 >後端開發 >Golang >如何在 Go 中有效地對結構體進行分組和求和?

如何在 Go 中有效地對結構體進行分組和求和?

Linda Hamilton
Linda Hamilton原創
2024-11-05 07:25:02726瀏覽

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

在Go 中對結構體切片進行分組和求和

在此場景中,您的目標是根據八個特定字段將結構體切片分組並對額外的整數欄位求和,類似於SQL 查詢。為了實現這一目標,您最初考慮建立一個 Equal 函數來比較結構並迭代檢查每個項目是否在雜湊表中,相應地添加或求和欄位。

雖然您的方法有效,但還有一種替代解決方案提供高效和簡單。重構您的類型,以便關鍵字段 (id1-id8) 形成一個單獨的結構體 Key。這允許您使用 Key 作為映射鍵,因為結構在 Go 中是可比較的。

這是修改後的型別定義:

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

要分組並計算總和,請使用映射[關鍵]int。使用Register.key 作為映射鍵來收集具有相同鍵(ids) 的所有寄存器:

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

此解決方案提供了一種簡單有效的方法來對所提供的結構切片進行分組和求和。不需要額外的函式庫或複雜的迭代機制。

以上是如何在 Go 中有效地對結構體進行分組和求和?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn