scala处理字符串并执行累积

时间:2015-04-23 01:40:04

标签: scala

我有变量:

val list= rows.sortBy(- _._2).map{case (user , list) => list}.take(20).mkString("::")  

结果println(list)应为:

60::58::51::48::47::47::45::45::43::43::42::42::42::41::41::41::40::40::40::39

现在我必须处理这些数字(如直方图概念)

如果我设置中断是10,它应该将最大数量(60)除以10并制作6个桶:

  • 0~10 (0<x<=10)之间的范围与0匹配
  • 10~20 (10<x<=20)之间的范围与0匹配
  • 20~30 (20<x<=30)之间的范围与0匹配
  • 30~40 (30<x<=40)之间的范围有4个数字匹配
  • 40~50 (40<x<=50)之间的范围有13个数字匹配
  • 范围在50~60 (50<x<=60)之间有3个数字匹配

然后我必须保存2个变量xy

x:  0~10::10~20::20~30::30~40::40~50::50~60
y:  0::0::0::4::13::3

我该怎么做?

1 个答案:

答案 0 :(得分:1)

val actualList = list.split("::").map(_.toInt).toList
val step = 10
val steps = step to actualList.max by step
//for each step, output a count of all items in the list that are 
//between the current step and currentStep - stepVal
val counts = steps.map(x=>actualList.count(y=>y <= x && y > x - step))
val stepsAsString = steps.map(x=>s"${x-step}~$x")

你也可以映射它们:

steps.zip(counts).toMap

请注意,如果首先对列表进行排序,则可以提高性能,但除非您需要,否则我不会担心调整