在Scala中重新排序序列

Mic*_*ael 0 sorting scala sequence

假设我有一个Seq[Int].现在我想重新排序序列,将序列元素<= 0放在第一位,将元素> 0放在它们之后.如何简单有效地做到Scala

Rex*_*err 6

最简单的:

xs.sortBy(_ > 0)
Run Code Online (Sandbox Code Playgroud)

效率稍高:

xs.groupBy(_ > 0).toSeq.sortBy(_._1).flatMap(_._2)
Run Code Online (Sandbox Code Playgroud)

效率更高:

xs.partition(_ <= 0) match { case(a,b) => a ++ b }
Run Code Online (Sandbox Code Playgroud)

更高效的是直接使用数组.从你开始Seq[Int],我假设你不是那么迫切的速度.