使用scala時有arange的需求,但是沒有找到相對應函數,只找到了group,sliding函數,於是自己實現一個:
目標:
給定起點,終點和份數,得到arange結果
實現:
計算起始點長度與分類數,得到每一步的Step,然後循環添加即可。這裏還加了隱式轉換是爲了函數傳參類型轉換。
private implicit def doubleToFloat(number: Double): Float ={
number.toFloat
}
private def getPercent(st: Float, end: Float, num: Int): Array[String] = {
val step = (end - st) / num
(0 to num).map(x => {
val per = st + x * step
per.formatted("%.2f")
}).toArray
}
結果:
1)小數
val arange = getPercent(0,0.5,10)
println(arange.mkString("\t"))
0.00 0.05 0.10 0.15 0.20 0.25 0.30 0.35 0.40 0.45 0.50
2)整數
val arange = getPercent(10,100,10)
println(arange.mkString("\t"))
10.00 19.00 28.00 37.00 46.00 55.00 64.00 73.00 82.00 91.00 100.00
額外:
順便mark下group和sliding的用法
group:
把一批數據按group內的數字分組,最後不夠拼成一組的單獨成組:
arange.grouped(2).foreach(x => println(x.mkString(" ")))
10.00 19.00
28.00 37.00
46.00 55.00
64.00 73.00
82.00 91.00
100.00
sliding:
第一個參數爲窗口大小,第二個參數爲移動步長,相當於從起始點拿一個窗口的數據,再走一個步長,再拿一個窗口,最後不夠了就當獨放出來:
arange.sliding(3,4).foreach(x => println(x.mkString(" ")))
10.00 19.00 28.00
46.00 55.00 64.00
82.00 91.00 100.00