Как сортировать фрагменты в 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)

но не уверен, как его использовать. Пожалуйста помоги. Спасибо!


person sagit    schedule 29.03.2013    source источник


Ответы (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.

person peterSO    schedule 29.03.2013

Почему бы просто не запросить объекты в правильном порядке из хранилища данных?

q := datastore.NewQuery("Course").Order("Name")
person Rich Churcher    schedule 29.03.2013