scala统计word中的字母对
我是新来学习Scala的,如果您能想到一种惯用的方法来完成下面的工作,我将不胜感激。我想计算单词中连续字母对的出现次数 例如,对于单词“home”,输出可能是scala统计word中的字母对,scala,Scala,我是新来学习Scala的,如果您能想到一种惯用的方法来完成下面的工作,我将不胜感激。我想计算单词中连续字母对的出现次数 例如,对于单词“home”,输出可能是Map(“ho”->1,“om”->1,“me”->1)。对于“露露”,结果将是Map(“lu”->2,“ul”->1) 因此,执行简单的单字母计数可能如下所示: "abracadabra".map(s => s).groupBy(identity).mapValues(_.length) 但我很困惑,如何在这个问题中加入两个字母的
Map(“ho”->1,“om”->1,“me”->1)
。对于“露露”,结果将是Map(“lu”->2,“ul”->1)
因此,执行简单的单字母计数可能如下所示:
"abracadabra".map(s => s).groupBy(identity).mapValues(_.length)
但我很困惑,如何在这个问题中加入两个字母的成分。谢谢你的想法 您应该使用滑动(2):
您可以使用
。滑动:
scala> "abracadabra".sliding(2).toList.groupBy(identity).mapValues(_.length)
res3: scala.collection.immutable.Map[String,Int] =
Map(br -> 2, ca -> 1, ab -> 2, ra -> 2, ac -> 1, da -> 1, ad -> 1)
scala> "lulu".sliding(2).toList.groupBy(identity).mapValues(_.length)
res4: scala.collection.immutable.Map[String,Int] = Map(ul -> 1, lu -> 2)
从文档中:
滑动:通过在固定大小的块上传递“滑动窗口”,将其分组
scala> "abracadabra".sliding(2).toList.groupBy(identity).mapValues(_.length)
res3: scala.collection.immutable.Map[String,Int] =
Map(br -> 2, ca -> 1, ab -> 2, ra -> 2, ac -> 1, da -> 1, ad -> 1)
scala> "lulu".sliding(2).toList.groupBy(identity).mapValues(_.length)
res4: scala.collection.immutable.Map[String,Int] = Map(ul -> 1, lu -> 2)