假设我有一个Seq[Int]
. 现在我想重新排序序列,将序列元素 <= 0 首先放置,元素 > 0 放在它们之后。如何简单有效地做到这一点Scala
?
问问题
538 次
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 回答