在 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中文网其他相关文章!