首页 > 后端开发 > Golang > 正文

如何在 Go 中有效地对结构体进行分组和求和?

Linda Hamilton
发布: 2024-11-05 07:25:02
原创
671 人浏览过

How to Efficiently Group and Sum a Slice of Structs in Go?

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

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责声明 Sitemap
PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!