我是函数式编程语言的新手,我正在 Scala 中为大学项目学习它。
这可能看起来很简单,但我无法在网上找到足够的帮助或直接的方法 - 如何将 Array[String] 转换为 Array[Double]?我有一个 CSV 文件,当读入 REPL 时,它被解释为字符串值(文件的每一行都有整数和字符串值的混合),它将返回一个类型 Array[String]。我想用 double/int 值对字符串值进行编码以返回 Array[Double] 以使数组均匀。有没有一种直接的方法可以做到这一点?任何指导将不胜感激。
到目前为止我所做的是:
def retrieveExamplesFromFile(fileName : String) : Array[Array[String]] = {
val items = for {
line <- Source.fromFile(fileName).getLines()
entries = line.split(",")
} yield entries
return items.toArray
}
每行的格式(以 String[] 形式返回)如下:
[[1.0, 2.0, item1], [5, 8.9, item2],....]
并将 CSV 文件中的每一行转换为双数组,我只起草了一个伪定义:
def generateNumbersForStringValues(values : Array[String]) : Array[Double] = {
val line = for(item <- values)
{
//correct way?
item.replace("item1", "1.0")
item.replace("item2", "1.0")
}
return //unable to typecast/convert
}
欢迎任何想法。感谢您的时间。
最佳答案
您可能想使用 map
连同 toDouble
:
values.map(x => x.toDouble)
或者更简洁:
values.map(_.toDouble)
对于非双字符串的回退,您可以考虑使用
Try
monad(在 scala.util
中):values.map(x => Try(x.toDouble).getOrElse(1.0))
如果您知道每一行的样子,您还可以进行模式匹配:
values map {
case Array(a, b, c) => Array(a.toDouble, b.toDouble, 1.0)
}
关于arrays - Scala - 将 Array[String] 转换为 Array[Double],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28785064/