我正在尝试对切片进行排序。如何在gae中使用go?
我有结构
type courseData struct {
Key *datastore.Key
FormKey *datastore.Key
Selected bool
User string
Name string
Description string
Date time.Time
}
我想在“名称”字段中对此实体类型进行排序。
q := datastore.NewQuery("Course")
var courses []*courseData
if keys, err := q.GetAll(c, &courses); err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError)
return
} else {
for i := range courses {
courses[i].Key = keys[i]
}
}
我试过了
Sort(data Interface)
但不确定如何使用它。 请帮忙。谢谢!
答案 0 :(得分:2)
例如,
package main
import (
"fmt"
"sort"
"time"
)
type Course struct {
Key string // *datastore.Key
FormKey string // *datastore.Key
Selected bool
User string
Name string
Description string
Date time.Time
}
type Courses []*Course
func (s Courses) Len() int { return len(s) }
func (s Courses) Swap(i, j int) { s[i], s[j] = s[j], s[i] }
type ByName struct{ Courses }
func (s ByName) Less(i, j int) bool { return s.Courses[i].Name < s.Courses[j].Name }
func main() {
var courses = Courses{
&Course{Name: "John"},
&Course{Name: "Peter"},
&Course{Name: "Jane"},
}
sort.Sort(ByName{courses})
for _, course := range courses {
fmt.Println(course.Name)
}
输出:
Jane
John
Peter
需要导出 Course
和Courses
以供sort
包使用。
为避免使示例依赖于GAE,请将*datastore.Key
类型更改为string
。
答案 1 :(得分:2)
为什么不从数据存储区以正确的顺序询问实体?
q := datastore.NewQuery("Course").Order("Name")