Go 中按 Time.Time 排序结构
根据 time.Time 类型的成员字段对结构进行排序是 Go 中的常见任务编程。要了解解决方案,让我们深入研究问题:
问题:
尝试使用自定义排序函数对包含名为 date 的 time.Time 成员的结构进行排序时,结果列表保持未排序。
自定义排序函数:
您提供了以下自定义排序函数:
type timeSlice []reviews_data // Forward request for length func (p timeSlice) Len() int { return len(p) } // Define compare func (p timeSlice) Less(i, j int) bool { return p[i].date.Before(p[j].date) } // Define swap over an array func (p timeSlice) Swap(i, j int) { p[i], p[j] = p[j], p[i] }
这些函数定义了一个自定义类型 timeSlice,它实现了 Go 中排序所需的 sort.Interface 接口。
地图排序:
您的目标是按其值的日期字段对 map[string]reviews_data 类型的地图进行排序。这是您的排序代码:
//Sort the map by date date_sorted_reviews := make(timeSlice, 0, len(reviews_data_map)) for _, d := range reviews_data_map { date_sorted_reviews = append(date_sorted_reviews, d) } sort.Sort(date_sorted_reviews)
解决方案:
问题是由于对 sort.Sort 的错误调用而引起的。对于 Go 1.8 及更高版本,建议对切片进行排序的方法是使用 sort.Slice:
sort.Slice(date_sorted_reviews, func(i, j int) bool { return date_sorted_reviews[i].date.Before(date_sorted_reviews[j].date) })
此语法显式定义要排序的切片和排序函数。使用此更新的代码将按日期字段正确对结构进行排序。
以上是如何在 Go 中正确排序包含 `time.Time` 字段的结构体?的详细内容。更多信息请关注PHP中文网其他相关文章!