按最频繁出现的元素优先排序列表 - 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
我想对一个列表进行排序,以普通列表为例:
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