2015-08-20 47 views
3

這是Scala for the Impatient問題,陣列的章節表述爲產生新的數組,其中所有正至上,那麼負數或零,但在相同的順序

鑑於整數數組,產生一個包含所有新的數組 原始數組的原始順序爲 ,其後跟所有值爲零或負數的原始數組,其原始順序爲 。

我的嘗試是

scala> val b = Array(-1, 2,3,4, -10, 0, -12) 
b: Array[Int] = Array(-1, 2, 3, 4, -10, 0, -12) 

scala> val(positive, negative) = b partition(_ > 0) 
positive: Array[Int] = Array(2, 3, 4) 
negative: Array[Int] = Array(-1, -10, 0, -12) 

scala> positive ++ negative 
res11: Array[Int] = Array(2, 3, 4, -1, -10, 0, -12) 

我可以做一個行這更好的?我不知道

回答

6

考慮filterfilterNot如下,

b.filter(_ > 0) ++ b.filterNot(_ > 0) 
+0

非常整齊@elem。非常感謝 – daydreamer

+0

爲什麼filterNot(),它只能使用filter來實現。 'arr.filter(_> 0)++ arr.filter(_ <= 0)' –

0

b.sorted(Ordering.by((_: Int) <= 0))

方法sorted返回數組排序,根據排序(它說,正數有低階大於零或負),而無需修改原始數組。

+0

您需要爲您的答案添加一些解釋。 – n1c9

+0

編輯成答案;) – n1c9

1

看起來很簡單,如果你使用過濾器。我的版本:

def result(a: Array[Int]): Array[Int] = a.filter(_ > 0) ++ a.filter(_ <= 0) 
0
b.sortWith((l, r) => if(l > 0 && r < 1) true else false) 
相關問題