与 .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中文网其他相关文章!