按最频繁出现的元素优先排序列表 - Scala

Sorting list by most frequent element first - Scala

我想对一个列表进行排序,以普通列表为例:

List("5", "3", "3", "6", "3", "5")

然后按最高元素排序,变成这样:

List("3", "5", "6")

我尝试按照

的方式做一些事情
val key = list.groupBy(indentity).mapValues(_.size)
val newList = key.KeySet.toList

但这并没有按顺序对列表进行排序(我认为是因为 KeySet 首先对其进行随机排序,但并不完全确定)。谢谢!

所以根据出现次数排序?

计算出现次数:

val occ = 
  List("5", "3", "3", "6", "3", "5")
    .groupBy(identity)
    .mapValues(_.size)
//Map(5 -> 2, 6 -> 1, 3 -> 3)    

并根据 occ:

排序
occ
  .toList
  .sortBy { case (value, occ) => -occ }
  .map(_._1)
//List(3, 5, 6)

您可以在生成列表之前对地图元素进行排序:

val list  = List("5", "3", "3", "6", "3", "5")
val key = list.groupBy(identity)
  .view
  .mapValues(_.size)
  .toSeq
  .sortBy(_._2)(Ordering.Int.reverse)
  .map(_._1)
  .toList