【问题标题】:Sort slice on number of occurrences of a value根据值的出现次数对切片进行排序
【发布时间】:2019-04-28 12:52:21
【问题描述】:

请参阅this playground。我有一些数据。现在我想对这个切片进行排序,但不是对其中一个值内的值进行排序,而是想根据其中一个值的出现次数对其进行排序。

不幸的是,我不知道如何解决这个问题。有人可以指点我正确的方向吗?

我知道我能做到:

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

这将对切片进行排序,但将从“最高”供应商ID 开始。但我想要的是对出现次数进行排序:首先是供应商 ID 的租约数。

【问题讨论】:

    标签: sorting go slice


    【解决方案1】:

    遍历切片,填充出现的映射,然后根据出现次数对切片进行排序:

    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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-08-04
      • 1970-01-01
      • 1970-01-01
      • 2020-06-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-03
      相关资源
      最近更新 更多