2014-01-29 12 views
1

嘿我有地图这样的:变换阶内地图

val valueParameters = Map("key1"->"value","anotherkey1"->"value","thirdkey1"->"value","key2"->"value","anotherkey2"->"value","thirdkey2"->"value") 

和图案:

val pattern = """(?<=[a-zA-Z])\d{1,2}""".r 

val result = valueParameters.groupBy(x=>pattern.findAllIn(x._1).next().toInt).toSeq.sortBy(_._1).toMap 

其给出:Map[Int,Map[String,String],我想从第二地图的第一字符串中删除数我不需要再这样我就可以:结果(1)( “钥匙”)不会导致(1)( “键1”)

+0

看起来效率不高,但你可以做一些像'result.mapValues {case(key,value)=>('removenumberfromkeyhere',value)}' – Kigyo

+0

小心mapValues。这是一个懒惰的操作,所以这可能不是你想要的,因为那么每个访问都会执行计算。见https://issues.scala-lang.org/browse/SI-4776 –

回答

3

这应该工作

val result1 = result.map { case (k,v) => 
    k -> v.map { case (a,b) => 
    val a1 = a.takeWhile(! _.isDigit) 
    a1 -> b 
    } 
} 

请注意,虽然使用mapValues会导致代码更短,但mapValues是一种懒惰的操作,每次访问映射时都会执行计算,而映射条目会导致计算只执行一次,这通常是您预计在斯卡拉。

+0

是的,谢谢,工作正常,是的,我不得不a.replaceAll(“\\ d”,“”),因为将有两位数字的条目。 – teodimoff

+0

我修改了代码以删除数字。但replaceAll显然也可以。 –