0

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

4

4 回答 4

6

最简单的:

xs.sortBy(_ > 0)

效率更高一点:

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

更高效:

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

更有效的是直接使用数组。既然你从 开始Seq[Int],我假设你没有那么急于速度。

于 2013-06-20T16:00:24.470 回答
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)
于 2013-06-20T15:28:26.213 回答
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)
于 2013-06-20T15:31:24.680 回答
1

Or:

def reorder(xs: Seq[Int]): Seq[Int] =
  ((_: Seq[Int]) ++ (_: Seq[Int])) tupled xs.partition(_ <= 0)
于 2013-06-20T16:17:12.850 回答