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

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

Linda Hamilton
发布: 2024-12-09 20:07:19
原创
227 人浏览过

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

使用多个标准对结构进行排序

在 Go 中,可以使用多种方法来实现对结构体切片的排序。本讨论重点关注按多个参数排序,特别是按 LastName 和 FirstName。

方法 1:slices.SortFunc (Go 1.22 )

对于 Go 1.22 及更高版本, slices.SortFunc 提供了一个优雅的解决方案:

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

方法二:sort.Slice 或 sort.Sort

在 Go 1.8 中,可以使用 sort.Slice 或 sort.Sort。两者都需要较少的函数来确定顺序。此函数比较 LastName 和 FirstName 字段:

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
})
登录后复制

对于 sort.Sort,需要实现 sort.Interface 的自定义类型:

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))
登录后复制

性能注意事项

选择最适合您的应用程序要求的方法。除非性能分析表明排序是瓶颈,否则应优先考虑便利性。

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

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