我刚进入Scala几个星期,我发现它既令人愉快又令人畏惧。我正在尝试解构两个元组,超出空间分隔的4列文本文件。我想匹配(但不是保留)第一列,删除最后一列,同时保留中间的两列(文章,请求)。
val filteredPairs = bufferedSource.getLines().toList map { line =>
line.trim.split("\\s+").toList
match {
case List("en", article, requests, _) => (article, requests)
case _ => None
}
} filter { m => m != None }我也尝试过返回"case _ => ",在hashrocket和接收单元()之后没有任何输入。我一直在摆弄map和flatmap map,但在类型匹配方面遇到了问题。也许我需要一个选择,但我有一个最后期限,这两个解决方案对我都有效,所以我现在继续前进,但我想找到一个更优雅的解决方案。谢谢。
发布于 2020-10-28 21:24:26
您可以使用类似于filter + map的collect。正如我经常说的,是你的朋友。
(顺便说一句,您可以将toList转换移动到最后,以利用getLines__返回的迭代器)
val filteredPairs =
bufferedSource
.getLines()
.map(line => line.trim.split("\\s+").toList)
.collect {
// If it has more than four columns, this won't match.
case "en" :: article :: requests :: _ :: Nil => (article, requests)
}.toListhttps://stackoverflow.com/questions/64573468
复制相似问题