Go语言中合并两个结构体切片的方法
在Go语言中,合并两个结构体切片并非简单的直接拼接,需要根据实际需求选择合适的合并策略。以下介绍一种常用的方法,结合append函数和map进行去重和数值合并。
假设我们有两个totalissue结构体切片:
type totalissue struct { issuetype string `json:"issue_type"` count int `json:"count"` donecount int `json:"donecount"`}arr1 := []totalissue{{"qa", 10, 0}, {"ops", 7, 0}, {"rdc", 14, 0}, {"test", 1, 0}, {"www", 22, 0}}arr2 := []totalissue{{"ops", 0, 2}, {"test", 0, 1}, {"www", 0, 18}}
登录后复制
直接使用append(arr1, arr2…)会简单地拼接两个切片,但如果issuetype相同,则会产生重复项。为了解决这个问题,我们可以使用一个map来进行去重和数值合并:
立即学习“go语言免费学习笔记(深入)”;
mergedMap := make(map[string]totalissue)for _, issue := range arr1 { mergedMap[issue.issuetype] = issue}for _, issue := range arr2 { if existingIssue, ok := mergedMap[issue.issuetype]; ok { existingIssue.count += issue.count existingIssue.donecount += issue.donecount mergedMap[issue.issuetype] = existingIssue } else { mergedMap[issue.issuetype] = issue }}var arr3 []totalissuefor _, issue := range mergedMap { arr3 = append(arr3, issue)}fmt.Println(arr3) // 输出合并后的切片
登录后复制
这段代码首先创建一个map,键为issuetype,值为totalissue结构体。然后遍历两个切片,将totalissue添加到map中。如果issuetype已存在,则更新count和donecount的值;否则,添加新的totalissue。最后,将map中的值转换为切片,得到合并后的结果。 输出结果将是:
[{qa 10 0} {ops 7 2} {rdc 14 0} {test 1 1} {www 22 18}]
登录后复制
这种方法有效地合并了两个切片,并对相同issuetype的结构体进行了数值合并,避免了重复。 请注意,代码中使用了小写字母的issuetype,与示例中的大写有所不同,这是为了保持Go语言的命名规范。 选择大写或小写取决于你的实际代码风格和结构体定义。
以上就是Go语言中如何合并两个结构体切片?的详细内容,更多请关注【创想鸟】其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。
发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2308090.html