Сортировать срез по количеству появлений значения - PullRequest
0 голосов
/ 26 ноября 2018

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

К сожалению, у меня нет подсказкикак это исправить.Может кто-нибудь, пожалуйста, указать мне правильное направление?

Я знаю, что могу сделать это:

sort.Slice(messages, func(i, j int) bool {
    return messages[i].SupplierID < messages[j].SupplierID
})

Это будет сортировать срез, но он начнется с "наивысшего" идентификатора поставщика.но я хочу отсортировать по количеству вхождений: сначала по числу аренды с идентификаторами поставщиков.

1 Ответ

0 голосов
/ 26 ноября 2018

Выполните итерацию по срезу, заполните карту вхождений, затем отсортируйте срез по количеству вхождений:

supplierCounts := make(map[int]int)
for _, msg := range messages {
    supplierCounts[msg.SupplierID]++
}

sort.Slice(messages, func(i, j int) bool {
    return supplierCounts[messages[i].SupplierID] < supplierCounts[messages[j].SupplierID]
})

https://play.golang.org/p/YMWPP2JBC2P

...