在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中文網其他相關文章!