在Scala中重新排序序列

时间:2013-06-20 15:21:22

标签: scala sorting sequence

假设我有Seq[Int]。现在我想重新排序序列以将序列元素< = 0放在第一位,将元素>放在一起。 0之后。如何在Scala中简单有效地完成这项工作?

4 个答案:

答案 0 :(得分:6)

最简单的:

xs.sortBy(_ > 0)

效率稍高:

xs.groupBy(_ > 0).toSeq.sortBy(_._1).flatMap(_._2)

效率更高:

xs.partition(_ <= 0) match { case(a,b) => a ++ b }

更高效的是直接使用数组。因为你从Seq[Int]开始,我假设你不是那种速度的压力。

答案 1 :(得分:2)

简单快捷:

Seq(1, -1, 4, 2, -3, 6, -4).partition(_ <= 0) match{
    case (smaller, bigger) => smaller ++ bigger
}
//List(-1, -3, -4, 1, 4, 2, 6)

答案 2 :(得分:2)

val (xs, ys) = Seq(-1, 1, -2, 2, 3, -3, 0).partition(_ <= 0)
val zs = xs ++ ys
  // List(-1, -2, -3, 0, 1, 2, 3)

答案 3 :(得分:1)

或者:

def reorder(xs: Seq[Int]): Seq[Int] =
  ((_: Seq[Int]) ++ (_: Seq[Int])) tupled xs.partition(_ <= 0)