首页 >后端开发 >Golang >如何按'time.Time”字段对 Go 结构体进行排序?

如何按'time.Time”字段对 Go 结构体进行排序?

Mary-Kate Olsen
Mary-Kate Olsen原创
2024-12-03 18:19:09266浏览

How to Sort a Go Struct by its `time.Time` Field?

在 Go 中按 Time.Time 字段对结构体进行排序

当尝试按 time.Time 类型的成员对结构体进行排序时,用户可能会遇到意想不到的结果。出现此问题的原因是默认排序包缺少对时间值进行排序的功能。

问题描述:

提供的结构体reviews_data有一个名为 date of 的成员输入时间.时间。用户定义了自定义切片类型 timeSlice,实现了 Len、Less 和 Swap 方法来对切片进行排序。他们尝试将reviews_data的映射映射到timeSlice,对切片进行排序,并期望映射按其日期值排序。但是,排序并没有按预期进行。

解决方案:

对于 Go 1.8 及以上版本,可以通过使用 sort.Slice 函数来解决该问题排序。排序。按日期字段对切片进行排序的新语法为:

sort.Slice(timeSlice, func(i, j int) bool {
    return timeSlice[i].date.Before(timeSlice[j].date)
})

sort.Slice 函数采用要排序的切片和定义比较函数的闭包。在这种情况下,闭包会比较切片中两个元素的日期值。

说明:

在 Go 1.8 之前,sort.Sort 函数只能是与实现 Sorter 接口的类型一起使用。在 Go 1.8 及更高版本中,引入了 sort.Slice,允许用户使用闭包对切片进行排序,而无需实现自定义 Sorter 类型。

以上是如何按'time.Time”字段对 Go 结构体进行排序?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn