首页 > 后端开发 > Golang > 如何在 Go 中按多个字段对结构进行排序(姓氏然后名字)?

如何在 Go 中按多个字段对结构进行排序(姓氏然后名字)?

Patricia Arquette
发布: 2024-12-12 17:36:12
原创
195 人浏览过

How to Sort Structs in Go by Multiple Fields (LastName then FirstName)?

如何对具有多个参数的结构进行排序

在编程中,经常需要根据多个条件对数据进行排序。在 Go 中,可以使用自定义排序函数有效地实现这一点。

问题:
如何按姓氏和名字对结构体切片进行排序?

使用 slices.SortFunc 的解决方案(Go 1.22 ):

slices.SortFunc(members, func(a, b Member) int {
    return cmp.Or(
        cmp.Compare(a.LastName, b.LastName),
        cmp.Compare(a.FirstName, b.FirstName),
    )
})
登录后复制

此解决方案使用 slices.SortFunc 函数按 LastName 和 FirstName 字段按顺序比较结构。

使用 sort.Slice 或sort.Sort:

sort.Slice(members, func(i, j int) bool {
    if members[i].LastName != members[j].LastName {
        return members[i].LastName < members[j].LastName
    }
    return members[i].FirstName < members[j].FirstName
})
登录后复制
type byLastFirst []Member

func (members byLastFirst) Len() int           { return len(members) }
func (members byLastFirst) Swap(i, j int)      { members[i], members[j] = members[j], members[i] }
func (members byLastFirst) Less(i, j int) bool {
    if members[i].LastName != members[j].LastName {
        return members[i].LastName < members[j].LastName
    }
    return members[i].FirstName < members[j].FirstName
}

sort.Sort(byLastFirst(members))
登录后复制

两种解决方案都首先比较 LastName 字段。如果它们相等,则比较 FirstName 字段。结果是按两个字段排序的成员切片。

以上是如何在 Go 中按多个字段对结构进行排序(姓氏然后名字)?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板