2013-06-20 103 views
0

假設我有一個Seq[Int]。現在我想重新排序序列,首先將序列元素< = 0並且元素> 0。如何在Scala中簡單高效地做到這一點?Scala中的重新排序順序

回答

6

最簡單的:

xs.sortBy(_ > 0) 

會更有效:

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

更高效而:

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

更高效的是直接與數組一起工作。由於你從Seq[Int]開始,我假設你對速度沒有要求。

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
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) 
1

或者:

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