Go 中結構體切片的分組和求和
在分析數據時,經常需要將相似的元素分組在一起併計算聚合值每組。在 LINQ 中,可以使用記憶體中查詢有效地實現這一點。 Go 提供了一種使用映射和閉包執行類似操作的通用方法。
考慮一個 Register 結構體切片,其中每個結構體包含多個唯一標識符(id1 到 id8)和一個整數值(金錢)。目標是按唯一識別碼對這些暫存器進行分組,並對每組對應的貨幣值進行求和。
手動分組和求和:
一種方法是建立一個自訂 Equal 函數,用於根據識別碼比較暫存器結構。然後,迭代切片,檢查每個暫存器是否已存在於雜湊表中。如果是,則貨幣價值增加。如果不是,則將一個新條目新增至包含暫存器和初始貨幣值 0 的哈希表中。
使用鍵結構和映射:
Go 的映射提供了一種更有效的方法來執行分組和求和操作。透過定義僅包含唯一識別碼(id1 到 id8)的單獨 Key 結構,您可以將其用作映射的唯一鍵。映射中的值可以是具有相同識別符組合的暫存器的貨幣值總和。
實作此方法:
<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>
<code class="go">m := map[Key]int{}</code>
<code class="go">for _, v := range regs { m[v.key] += v.money }</code>
輸出與格式:
為了更好地顯示結果,您可以格式化其所有欄位都以id 為前綴的鍵結構。例如:
<code class="go">fmt.Println("Nice output:") for k, v := range m { fmt.Printf("%+3v: %d\n", k, v) }</code>
結論:
在Go 中使用帶有鍵結構的映射是一種高效且靈活的結構體切片分組和求和方法。它提供了手動分組和求和的高效能替代方案,特別是在處理大型資料集時。
以上是如何使用映射和鍵結構對 Go 中的結構切片進行分組和求和?的詳細內容。更多資訊請關注PHP中文網其他相關文章!