【发布时间】:2011-06-06 14:06:43
【问题描述】:
这是我正在编写的示例程序,用于读取每行一个值列表的文件。我必须添加所有这些转换为 double 的值,并且还需要对值进行排序。这是我到目前为止提出的,它工作正常。
import scala.io.Source
object Expense{
def main(args: Array[String]): Unit = {
val lines = Source.fromFile("c://exp.txt").getLines()
val sum: Double = lines.foldLeft(0.0)((i, s) => i + s.replaceAll(",","").toDouble)
println("Total => " + sum)
println((Source.fromFile("c://exp.txt").getLines() map (_.replaceAll(",", "").toDouble)).toList.sorted)
}
}
这里的问题是,如您所见,我正在读取文件两次,我想避免它。由于Source.fromFile("c://exp.txt").getLines() 为您提供了一个迭代器,因此我只能循环遍历它一次,下一次操作将为空,因此我不能再次重用lines 进行排序,我需要再次从文件中读取。另外我不想将它们存储到临时列表中。有什么优雅的方法可以以实用的方式做到这一点吗?
【问题讨论】:
-
您已经在创建一个隐式列表,为什么不想使用一个呢?另外,我可能会考虑做一次你 replaceAll 的地图,然后在该列表上进行后续工作。否则,您也将执行所有 replaceAll 函数两次。
标签: scala functional-programming scala-2.8