【问题标题】:How to sort slices in GAE Go如何在 GAE Go 中对切片进行排序
【发布时间】:2013-03-20 00:23:59
【问题描述】:

我正在尝试对切片进行排序。如何在 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)

但不确定如何使用它。 请帮忙。谢谢!

【问题讨论】:

    标签: google-app-engine sorting interface go slice


    【解决方案1】:

    例如,

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

      【讨论】:

        猜你喜欢
        • 2016-12-01
        • 2018-02-22
        • 2017-05-30
        • 1970-01-01
        • 2020-06-08
        • 2019-01-08
        • 1970-01-01
        • 2018-06-25
        • 2019-01-13
        相关资源
        最近更新 更多