请参阅this playground。我有一些数据。现在,我想对该 slice 进行排序,但不对其中一个值内的值进行排序,而是对其中一个值的出现次数进行排序。
不幸的是,我不知道如何解决这个问题。有人可以指出我正确的方向吗?
我知道我可以这样做:
sort.Slice(messages, func(i, j int) bool {
return messages[i].SupplierID < messages[j].SupplierID
})
这将对 slice 进行排序,但将从“最大”的SupplierID开始。但是我想要的是对出现的次数进行排序:首先是带有SupplierID租约数量的事件。
最佳答案
迭代 slice ,填充事件图,然后根据出现的次数对 slice 进行排序:
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