2013-03-29 37 views
1

我正在嘗試對切片進行排序。如何在gae中使用go?如何在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) 

,但不知道如何使用它。 請幫忙。謝謝!

回答

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 

CourseCourses需要導出由sort包使用。

爲了避免使示例依賴於GAE,輸入*datastore.Key更改爲string

2

爲什麼不直接從數據存儲區以正確的順序詢問實體?

q := datastore.NewQuery("Course").Order("Name")