Scala组合功能问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Scala组合功能问题相关的知识,希望对你有一定的参考价值。

我有一个像这样的输入文件:

The Works of Shakespeare, by William Shakespeare 
Language: English

我想用flatMapcombinations方法来获得每行的K-V对。

这就是我做的:

var pairs = input.flatMap{line => 
  line.split("[\s*$&#/"'\,.:;?!\[\(){}<>~\-_]+")
    .filter(_.matches("[A-Za-z]+"))
    .combinations(2)
    .toSeq
    .map{ case array => array(0) -> array(1)}
}

在此之后我得到了17对,但错过了其中的2对:(by,shakespeare)(william,shakespeare)。我认为第一句话的最后一个字可能有问题,但我不知道如何解决它,有人能告诉我吗?

答案

即使值的顺序相反,combinations方法也不会给出重复。因此,您丢失的值已经以其他顺序出现在解决方案中。

此代码将在文本中创建所有有序的单词对。

  for {
    line <- input
    t <- line.split("""W+""").tails if t.length > 1
    a = t.head
    b <- t.tail
  } yield a -> b

以下是tails方法的描述:

迭代这个可遍历集合的尾巴。第一个值是这个可遍历的集合,最后一个将是一个空的可遍历集合,其间插值是尾部连续应用的结果。

以上是关于Scala组合功能问题的主要内容,如果未能解决你的问题,请参考以下文章

linux打开终端如何启动scala,如何在终端下运行Scala代码片段?

如何从一组中继容器中组合片段?

使用 Scala 解析器组合器解析 CSV 文件

详解 Scala 模式匹配

Relay.js 没有正确解析组合片段

Apache Hadoop与Gora的组合功能