使用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