Как выполнить обратную сортировку карты и отправить ее модели в Go Lang - PullRequest
0 голосов
/ 28 мая 2019

Я хочу отправить в обратном порядке список книг, которые хранятся на карте, и отправить это модели вместо карты в ее текущем порядке.

Мне нужно отобразить список в обратном порядке.введен порядок даты, который является pubDate, поэтому веб-страница (модель) отображает последние добавленные книги вместо добавленных первыми.

Я перепробовал много разных методов сортировки, но не знаю, как отправить это в модель.Например, я попытался импортировать "sort"

var m map[int]string
var keys []int
for k := range m {
    keys = append(keys, k)
}
sort.Ints(keys)
for _, k := range keys {
    fmt.Println("Key:", k, "Value:", m[k])
}

Я также попробовал sort.Slice (ad, func (i, j int) bool {

    return ad[i].date.Before(ad[j].date)})

, есть много других, ноКажется, я не могу работать.

type Book struct {
    ID     int64  `json:"id"`
    Title  string `json:"title"`
    Author string `json:"author"`
    pubDate time.Time `json:"pubDate"`
}

var bookModels = map[string]*Book{}

s := res.NewService("library")

    // Add handlers for "library.book.$id" models
    s.Handle(
        "book.$id",
        res.Access(res.AccessGranted),
        res.GetModel(getBookHandler),
        res.Set(setBookHandler),
    )

    // Add handlers for "library.books" collection
    s.Handle(
        "books",
        res.Access(res.AccessGranted),
        res.GetCollection(getBooksHandler),
        res.New(newBookHandler),
        res.Call("delete", deleteBookHandler),
    )

func getBookHandler(r res.ModelRequest) {

    book := bookModels[r.ResourceName()]
    if book == nil {
        r.NotFound()
        return
    }
    r.Model(book)
}

В основном я получаю сообщения об ошибках, из-за которых карта не допускает индексацию, неверный тип, не может получить доступ к полям и т. Д. Как вы можете использоватьсопоставить и отправить его в модель и убедиться, что у вас есть самые последние элементы, перечисленные первыми на веб-странице?

Ответы [ 2 ]

3 голосов
/ 28 мая 2019

карты на ходу всегда возвращаются в случайном порядке, если только вы не используете ключ для доступа к значению.так что вы не можете изменить порядок карты, потому что в первую очередь нет порядка

0 голосов
/ 28 мая 2019

Хотя вы не можете сортировать карты напрямую, вы можете обернуть каждую пару ключ-значение в новую структуру и отсортировать этот структурный массив. Нужно просто реализовать интерфейс сортировки, как указано здесь

Пример:

type structSorter []mystruct
func (a structSorter) Len() int           { return len(a) }
func (a structSorter) Swap(i, j int)      { a[i], a[j] = a[j], a[i] }
func (a structSorter) Less(i, j int) bool { return a[i].MyValue < a.[j].MyValue }

и вызывается с

sort.Sort(structSorter(mystructArray))
...