如何在 Go 中有效地对结构体进行分组和求和?
Nov 05, 2024 am 07:25 AM在 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中文网其他相关文章!
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门文章
两个点博物馆:邦格荒地地点指南
4 周前
By 尊渡假赌尊渡假赌尊渡假赌
击败分裂小说需要多长时间?
3 周前
By DDD
仓库:如何复兴队友
3 周前
By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒险:如何获得巨型种子
3 周前
By 尊渡假赌尊渡假赌尊渡假赌
公众号网页更新缓存难题:如何避免版本更新后旧缓存影响用户体验?
3 周前
By 王林

热门文章
两个点博物馆:邦格荒地地点指南
4 周前
By 尊渡假赌尊渡假赌尊渡假赌
击败分裂小说需要多长时间?
3 周前
By DDD
仓库:如何复兴队友
3 周前
By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒险:如何获得巨型种子
3 周前
By 尊渡假赌尊渡假赌尊渡假赌
公众号网页更新缓存难题:如何避免版本更新后旧缓存影响用户体验?
3 周前
By 王林

热门文章标签

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)