scala:所有长度为k的子字符串

izj3ouym  于 2021-05-18  发布在  Spark
关注(0)|答案(1)|浏览(453)

我对scala完全陌生,我很难理解如何使用像这样的函数 map() 或者 foreach() 对字符串执行操作。
特别是,我试图从一个字符串(称为k-shingles)中提取所有长度为k的唯一连续子字符串。我的职能 kshingles(s: String, k: Int) 在字符串上调用 "dab" 你应该回来 Set("ab", "bc", "cd", "da") .
如何在scala中实现这一点?一个额外的好处是它可以并行化(例如使用spark)

3pmvbmvn

3pmvbmvn1#

sliding 是你要找的方法。从 sliding 文档:
通过在固定大小的块上传递一个“滑动窗口”来对元素进行分组(而不是像中那样对它们进行分区) grouped )将“滑动窗口”步骤设置为1。
例如 "dab".sliding(2).toSet 将提供您正在寻找的结果。
在scala 2.13中 String.sliding 已弃用。scala 2.13的正确解决方案是:

"abcdab".toSeq.sliding(2).map(_.unwrap).toSet

scala 2.13的scastie
scala 2.12的scastie

相关问题