arrays - Scala - 将 Array[String] 转换为 Array[Double]

标签 arrays scala functional-programming

我是函数式编程语言的新手,我正在 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/

相关文章:

javascript - 使用 forEach 方法更改项目的属性 (javascript)

java - 卡夫卡 : Cant Create Multiple Stream Consumers

scala - sbt 编译需要很长时间才能完成

r - 为什么外部工作不像我认为的那样(在 R 中)?

java - 在 POJO 中复制公共(public)属性的 getter/setter 的方法

javascript - 惰性求值可以通过 monadic 类型实现吗?

c - 有没有一个函数可以将char数组输入的数字转换为int数组?

javascript - 使用 Javascript(和 PHP)检查所有 HTML 复选框(数组)

javascript - 无法将数组分配给全局变量 "name"

scala - 在 Traversable 的 foreach 方法中获取当前元素的索引?