Scala zipWithIndex 在一系列字符串上,对最后一个条目做一些不同的事情



我有一个Seq[String]表示一个文件,每个字符串都是文件中的一行。

我正在迭代这些行并解析记录:

fileLines.zipWithIndex.foreach {
case(fileLine, filePosition) => parseRecord(fileLine, filePosition)
}

现在,对于最后一条记录,我需要进行不同的解析。比方说parseLastRecord().最好的 Scala 方法是什么?

我问题的主要原因是,在我已经使用的 parseRecord 中进行最后一行解析是完全可以的,但是,我不想将 filePosition+totalSize 传递到其中......

在模式匹配时,您可以检查索引并从那里调用要调用的任何函数。

例如,如果最后一个元素我正在打印一些东西,否则以下示例中的每个元素。

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)
}

使用模式匹配

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);
}

最新更新