與 .NET 中的 LINQ 查詢類似,可以對 Golang 中的結構體執行內存中查詢。本文示範如何以多個欄位對結構體切片進行分組,然後對特定整數欄位進行求和。
給定一個結構體切片,其欄位名稱為 id1 到 id8 和一個整數字段 Money ,目標是按 id 欄位對結構進行分組並對 Money 欄位進行求和。
一種方法是定義一個 Equal 函數來比較基於在八個 id 欄位上。隨後,迭代輸入切片並檢查每個結構是否存在於雜湊表中。如果已經存在,則貨幣欄位增加;否則,一個新條目將添加到哈希表中。
但是,使用 Golang 的內建功能有一個更有效率、更優雅的解決方案。
關鍵概念是重構 Register 結構,使其僅包含名為 Key 的單獨結構中的分組欄位。由於結構體在 Golang 中是可比較的,因此您可以使用 Key 作為映射的鍵。然後可以透過映射的 Value 存取 Money 字段。
以下是更新的結構體定義:
<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>
分組並對寄存器求和,使用類型為map[Key] int 的映射,並以Register.key 作為鍵。這種方法確保具有相同 id 欄位的暫存器被分組在一起,並且每個群組的 Money 欄位都會被累積。
<code class="go">m := map[Key]int{} for _, v := range regs { m[v.key] += v.money }</code>
映射m 現在包含分組和求和的值,可以列印這些值進行分析.
所描述的解決方案為Golang 中的結構體切片的分組和求和提供了一個強大且有效率的機制。透過利用該語言的內建功能,它避免了自訂比較函數或雜湊表的需要,從而產生簡潔且可維護的程式碼。
以上是如何在Golang中按多個欄位對結構體切片進行分組和求和?的詳細內容。更多資訊請關注PHP中文網其他相關文章!