我有Seq[String]
表示文件,每个字符串都是文件中的一行。
我在遍历这些行并解析记录:
fileLines.zipWithIndex.foreach {
case(fileLine, filePosition) => parseRecord(fileLine, filePosition)
}
现在,对于最后一条记录,我需要进行不同的解析。让我们说parseLastRecord()
。什么是最好的Scala方式呢?
我的问题的主要原因是,在我已经使用的parseRecord中解析的最后一行是完全正常,但是,我没有'我想将filePosition + totalSize传递给它......
答案 0 :(得分:1)
在模式匹配时,您可以检查索引并从那里调用您想要调用的任何函数。
例如。如果最后一个元素我在下面的例子中打印了一些其他元素。
List(1, 2, 3, 4).zipWithIndex.foreach{
case (element, index) if index == 3 => println("last element")
case (element, index) => println(element)
}
输出
1
2
3
last element
所以,你的情况如下,
fileLines.zipWithIndex.foreach {
case(fileLine, filePosition) if filePosition == fileLines.length-1 => parseLastRecord(fileLine, filePosition)
case(fileLine, filePosition) => parseRecord(fileLine, filePosition)
}
答案 1 :(得分:1)
使用模式匹配
val l = List(1,2,3,4)
val spe = l.length - 1
l.zipWithIndex.foreach{ case(item, pos) => {pos match { case `spe` => println(s"$item $pos special"); case _ => println(s"$item $pos");}}}
在你的情况下
val last = fileLines.length - 1
fileLines.zipWithIndex.foreach {
case(fileLine, filePosition) => {filePosition match {
case `last` => parseLastRecord(fileLine, filePosition)
case _ => parseRecord(fileLine, filePosition);
}