Scala组合功能问题
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Scala组合功能问题相关的知识,希望对你有一定的参考价值。
我有一个像这样的输入文件:
The Works of Shakespeare, by William Shakespeare
Language: English
我想用flatMap
和combinations
方法来获得每行的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组合功能问题的主要内容,如果未能解决你的问题,请参考以下文章