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