如何使用多个参数对结构进行排序
在 Go 中,对结构体切片进行排序时,考虑多个排序参数通常很有用。例如,我们可能希望先按姓氏,然后按名字对成员进行排序。
实现此目的的一种方法是使用 Go 1.22 中引入的 slices.SortFunc 函数。 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), ) })
这里,我们使用 cmp.Or 来应用姓氏和名字比较。 cmp.Compare 返回一个整数,指示等于 (0)、大于 (1) 或小于 (-1)。
自 Go 1.8 起可用的另一个选项是使用 sort.Slice 或排序。使用自定义 less 函数对函数进行排序:
sort.Sort(byLastFirst(members))
这里,我们定义了一个自定义 byLastFirst 类型,它实现了 Len、Swap 和 Less 方法的sort.Interface接口。 Less 方法会检查姓氏和名字进行比较。
选择哪种方法取决于您使用的 Go 版本以及它为您的特定应用程序提供的便利性。但是,除非排序被证明是性能瓶颈,否则通常会首选最方便的方法。
以上是如何使用多个参数对 Go 中的结构进行排序?的详细内容。更多信息请关注PHP中文网其他相关文章!