我的一个朋友正在学习Scala,并编写了以下简单代码来跟踪文件中的最长行:

val longest = (filename:String) => {
  val is = new FileInputStream(filename)
  val buf = new Array[Byte](1024)
  var longest=0 //keep track of the longest line
  var lastPos=0
  var read=0
  try {
    read = is.read(buf)
    while (read > 0) {
      for (i<-0 until read) {
        if (buf(i) == '\n') {
          val size=i-lastPos-1
          lastPos=i
          if (size>longest) {
            longest=size
          }
        }
      }
      lastPos-=buf.length
      read=is.read(buf)
    }
  } finally {
    is.close()
  }
  longest
}


我也是Scala的新手,但是我很确定此代码中还有很多用于flatMaps和其他函数的空间。

有人可以发布此功能的版本吗?

最佳答案

替代实现:

def longest(filename: String) =
  Source.fromFile(filename).getLines.map(_.size).max


简要说明:


getLines返回文件中各行的迭代器;
map(_.size)等效的map(line => line.size)返回行长的新迭代器
max返回最大行长。

08-03 15:20