如何按时间排序

我正在尝试按其类型为time.Time的成员在Go中对结构进行排序。结构如下。

type reviews_data struct {

review_id string

date time.Time

score int

firstname string

anonymous bool

review_text string

title_text string

rating float64

upcount int

}

我具有以下用于排序的功能

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]

}

映射定义如下

var reviews_data_map = make(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)

问题是结果没有排序,谁能告诉我问题是什么。

回答:

在我看来,它看起来像是:

package main

import (

"fmt"

"sort"

"time"

)

type reviews_data struct {

review_id string

date time.Time

score int

firstname string

anonymous bool

review_text string

title_text string

rating float64

upcount int

}

type timeSlice []reviews_data

func (p timeSlice) Len() int {

return len(p)

}

func (p timeSlice) Less(i, j int) bool {

return p[i].date.Before(p[j].date)

}

func (p timeSlice) Swap(i, j int) {

p[i], p[j] = p[j], p[i]

}

func main() {

var reviews_data_map = make(map[string]reviews_data)

reviews_data_map["1"] = reviews_data{date: time.Now().Add(12 * time.Hour)}

reviews_data_map["2"] = reviews_data{date: time.Now()}

reviews_data_map["3"] = reviews_data{date: time.Now().Add(24 * time.Hour)}

//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)

}

fmt.Println(date_sorted_reviews)

sort.Sort(date_sorted_reviews)

fmt.Println(date_sorted_reviews)

}

输出:

[{ {63393534000 0 0x1ba3e0} 0  false   0 0} { {63393490800 0 0x1ba3e0} 0  false   0 0} { {63393577200 0 0x1ba3e0} 0  false   0 0}]

[{ {63393490800 0 0x1ba3e0} 0 false 0 0} { {63393534000 0 0x1ba3e0} 0 false 0 0} { {63393577200 0 0x1ba3e0} 0 false 0 0}]

以上是 如何按时间排序 的全部内容, 来源链接: utcz.com/qa/401142.html

回到顶部