按值出现的次数对切片进行排序

Please see this playground. I have a slice with some data. Now I want to sort this slice, but not on a value inside one of the values, but I want to sort it on the number of occurrences of one of the values.

Unfortunately I don't have a clue how to fix this. Can someone please point me to the right direction?

I know I can do this:

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

This will sort the slice, but it will start with the "higest" supplierID. but what I want is to sort on the number of occurrences: the ones with the lease number of supplierIDs first.

Iterate over the slice, populate a map of occurrences, then sort the slice based on the number of occurrences:

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