逆序 struct/results
Reverse chronological order of struct/results
刚开始学习goLang。
想知道我们如何在 Go 中以相反的顺序对结构元素进行排序。比方说,我从数据库中得到的结果类似于:
var results []<someClass>
collection.C(results).Find(bson.M{"<someid>":<id_val>}).All(&results)
现在,我的数据库 objects/results 在切片 results
中可用。如何在名为 time 的列上以相反的顺序对切片 results
进行排序?
最简单的方法是让 MongoDB 对记录进行排序:
var results []YourType
err := sess.DB("").C("collname").Find(bson.M{"someid": "someidval"}).
Sort("-timefield").All(&results)
如果由于某种原因您不能或不想这样做,您可以使用 sort
package. You need to implement sort.Interface
。
例如:
type YourType struct {
SomeId string
Timestamp time.Time
}
type ByTimestamp []YourType
func (a ByTimestamp) Len() int { return len(a) }
func (a ByTimestamp) Swap(i, j int) { a[i], a[j] = a[j], a[i] }
func (a ByTimestamp) Less(i, j int) bool {
return a[i].Timestamp.After(a[j].Timestamp)
}
这个 ByTimestamp
类型是 YourType
的一个切片,它定义了一个反向时间戳顺序,因为 Less()
方法使用 Time.After()
来决定元素和索引 i
小于索引 j
.
处的元素
并使用它(在 Go Playground 上试用):
var results []YourType
// Run your MongoDB query here
// Now sort it by Timestamp decreasing:
sort.Sort(ByTimestamp(results))
Less()
的另一种实现方式是使用 Time.Before()
,但将索引 j
处的元素与索引 i
处的元素进行比较:
func (a ByTimestamp) Less(i, j int) bool {
return a[j].Timestamp.Before(a[i].Timestamp)
}
在 Go Playground 上试试这个变体。
刚开始学习goLang。
想知道我们如何在 Go 中以相反的顺序对结构元素进行排序。比方说,我从数据库中得到的结果类似于:
var results []<someClass>
collection.C(results).Find(bson.M{"<someid>":<id_val>}).All(&results)
现在,我的数据库 objects/results 在切片 results
中可用。如何在名为 time 的列上以相反的顺序对切片 results
进行排序?
最简单的方法是让 MongoDB 对记录进行排序:
var results []YourType
err := sess.DB("").C("collname").Find(bson.M{"someid": "someidval"}).
Sort("-timefield").All(&results)
如果由于某种原因您不能或不想这样做,您可以使用 sort
package. You need to implement sort.Interface
。
例如:
type YourType struct {
SomeId string
Timestamp time.Time
}
type ByTimestamp []YourType
func (a ByTimestamp) Len() int { return len(a) }
func (a ByTimestamp) Swap(i, j int) { a[i], a[j] = a[j], a[i] }
func (a ByTimestamp) Less(i, j int) bool {
return a[i].Timestamp.After(a[j].Timestamp)
}
这个 ByTimestamp
类型是 YourType
的一个切片,它定义了一个反向时间戳顺序,因为 Less()
方法使用 Time.After()
来决定元素和索引 i
小于索引 j
.
并使用它(在 Go Playground 上试用):
var results []YourType
// Run your MongoDB query here
// Now sort it by Timestamp decreasing:
sort.Sort(ByTimestamp(results))
Less()
的另一种实现方式是使用 Time.Before()
,但将索引 j
处的元素与索引 i
处的元素进行比较:
func (a ByTimestamp) Less(i, j int) bool {
return a[j].Timestamp.Before(a[i].Timestamp)
}
在 Go Playground 上试试这个变体。