在编程中,经常需要在内存中执行数据操作任务收藏。一种常见的操作是将数据分组并汇总每个类别内的值。在处理结构体切片时经常会遇到这个问题。
考虑以下结构体切片:
<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>
任务是将元素分组按前八个字段(id 字段)进行切片并对每组的 Money 字段求和。此操作类似于 SQL 查询:
<code class="sql">SELECT SUM(money) FROM Registers GROUP BY id1, id2, id3, id4, id5, id6, id7, id8;</code>
Go 中有多种方法可以解决此问题。一种选择是使用哈希表来跟踪 id 字段的每个唯一组合的总和。
以下代码演示了此方法:
<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>
此解决方案提供了一种根据键对结构进行分组和求和的有效方法。
以上是如何在 Go 中对结构体切片进行分组和求和?的详细内容。更多信息请关注PHP中文网其他相关文章!