问题描述
我刚进入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和接收Unit()之后没有任何输入。我在摆弄地图和平面地图,但是在类型匹配方面遇到了问题。也许我在某处需要一个Option,但是我有一个截止日期,这两个解决方案都对我有用,所以我现在就继续前进,但是我想找到一个更优雅的解决方案。谢谢。
解决方法
您可以使用collect
,类似于filter
+ map
。我经常说scaladoc是你的朋友。
(顺便说一句,您可以将toList
转换移到最后,以利用getLines
返回的 Iterator )
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)
}.toList