首页 > 后端开发 > Golang > 如何在 Go 中正确排序包含 `time.Time` 字段的结构体?

如何在 Go 中正确排序包含 `time.Time` 字段的结构体?

DDD
发布: 2024-12-02 00:34:10
原创
556 人浏览过

How to Correctly Sort Structs Containing `time.Time` Fields in Go?

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

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