scala deal with string and do accumulative -
i have variable:
val list= rows.sortby(- _._2).map{case (user , list) => list}.take(20).mkstring("::")
the result println(list)
should be:
60::58::51::48::47::47::45::45::43::43::42::42::42::41::41::41::40::40::40::39
and have deal these numbers (like histogram concept)
if set break 10, should divide max number (60) 10 , make 6 buckets:
- the scope between 0~ 10
(0<x<=10)
have 0 numbers match - the scope between 10~ 20
(10<x<=20)
have 0 numbers match - the scope between 20~ 30
(20<x<=30)
have 0 numbers match - the scope between 30~ 40
(30<x<=40)
have 4 numbers match - the scope between 40~ 50
(40<x<=50)
have 13 numbers match - the scope between 50~ 60
(50<x<=60)
have 3 numbers match
and have save 2 variables x
, y
:
x: 0~10::10~20::20~30::30~40::40~50::50~60 y: 0::0::0::4::13::3
how can this?
val actuallist = list.split("::").map(_.toint).tolist val step = 10 val steps = step actuallist.max step //for each step, output count of items in list //between current step , currentstep - stepval val counts = steps.map(x=>actuallist.count(y=>y <= x && y > x - step)) val stepsasstring = steps.map(x=>s"${x-step}~$x")
and can map them too:
steps.zip(counts).tomap
note made more performant if list sorted first, wouldn't worry tuning unless need it