2017-06-01 42 views
0

假設我有一個(0, 0.1, 0.2, ..., 1)的數組,我有一個數字0.15,我希望能得到這個索引。由於0.15 > 0.10.15 < 0.2,它在區間2。有沒有一種最先進的方法來做到這一點?目前我使用一個帶有var變量的for循環並遍歷每個區間,但我認爲這不是最好的方法。斯卡拉一個數組的索引間隔的索引

回答

1

假設數組進行排序,你可以嘗試:

arr.indexWhere(_ >= 0.15) - 1 

如果你沒有這樣的例子 - 2

+0

它可以工作,但是對邊界有一點修改。謝謝! –

0

假設你的數組元素按升序排列,你可以定義一個簡單的函數組成一個插入元素的陣列,如下所示:

def insert(a: Array[Double], x: Double): Array[Double] = { 
    val i = a.indexWhere(_ >= x) 
    if (i >= 0) a.take(i) ++ Array(x) ++ a.drop(i) else a ++ Array(x) 
} 

val a = Array(0.0, 0.1, 0.2, 0.3, 0.4, 0.5) 

insert(a, 1.5) 
res1: Array[Double] = Array(0.0, 0.1, 0.2, 0.3, 0.4, 0.5, 1.5) 

insert(a, 3) 
res2: Array[Double] = Array(0.0, 0.1, 0.2, 0.3, 0.4, 0.5, 3.0) 

insert(a, -0.1) 
res3: Array[Double] = Array(-0.1, 0.0, 0.1, 0.2, 0.3, 0.4, 0.5) 
+1

而不是'take(i)'和'drop(i)'你可以使用'a.patch(i,Array(x),0)'。 – jwvh

+0

@jwvh,很高興知道。謝謝。 –