scala统计word中的字母对

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) 但我很困惑,如何在这个问题中加入两个字母的

我是新来学习Scala的,如果您能想到一种惯用的方法来完成下面的工作,我将不胜感激。我想计算单词中连续字母对的出现次数

例如,对于单词“home”,输出可能是
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)