从文件行创建 Scala 数组的更好方法
Better way to create scala array from lines of a file
考虑一个文件的每一行都有字符串,我想创建一个数组,文件的每一行都作为数组的一个元素。我知道我可以这样做:
import scala.io.Source
val path: String = "path/to/text/file.txt"
var array: Array[String] = new Array[String](0)
for (line <- Source.fromFile(path).getLines) {
array :+= line
}
但是它很长而且可能不是很理想。我在网上查看并没有找到更好的方法。您是否有更好的方法来使用我可能错过的数组内置方法或使用 map
或其他任何方法来创建此类数组?
谢谢。
使用 getLines returns 迭代,您可以从中使用 toArray
val path: String = "path/to/text/file.txt"
val array: Array[String] = Source.fromFile(path).getLines.toArray
在@TheFourthBird 的回答之上:
在您的代码中,您没有关闭文件。
这对于短程序来说可能没问题,但在一个长期存在的进程中,你应该明确地关闭它。
这可以通过以下方式完成:
import scala.io.Source
import scala.util.{Try, Using}
val path: String = "path/to/text/file.txt"
val tryLines: Try[Array[String]] = Using(Source.fromFile(path))(_.getLines.toArray)
见What's the right way to use scala.io.Source?
考虑一个文件的每一行都有字符串,我想创建一个数组,文件的每一行都作为数组的一个元素。我知道我可以这样做:
import scala.io.Source
val path: String = "path/to/text/file.txt"
var array: Array[String] = new Array[String](0)
for (line <- Source.fromFile(path).getLines) {
array :+= line
}
但是它很长而且可能不是很理想。我在网上查看并没有找到更好的方法。您是否有更好的方法来使用我可能错过的数组内置方法或使用 map
或其他任何方法来创建此类数组?
谢谢。
使用 getLines returns 迭代,您可以从中使用 toArray
val path: String = "path/to/text/file.txt"
val array: Array[String] = Source.fromFile(path).getLines.toArray
在@TheFourthBird 的回答之上:
在您的代码中,您没有关闭文件。 这对于短程序来说可能没问题,但在一个长期存在的进程中,你应该明确地关闭它。
这可以通过以下方式完成:
import scala.io.Source
import scala.util.{Try, Using}
val path: String = "path/to/text/file.txt"
val tryLines: Try[Array[String]] = Using(Source.fromFile(path))(_.getLines.toArray)
见What's the right way to use scala.io.Source?