Sha*_*man 14 arrays functional-programming scala
我是函数式编程语言的新手,我正在Scala中学习大学项目.
这可能看起来很简单,但我无法在网上找到足够的帮助或直接这样做 - 如何将Array [String]转换为Array [Double]?我有一个CSV文件,当读入REPL时被解释为String值(文件的每一行都有整数和字符串值的混合),这将返回一个类型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
}
Run Code Online (Sandbox Code Playgroud)
每行的格式(作为String []返回)是这样的:
[[1.0, 2.0, item1], [5, 8.9, item2],....]
Run Code Online (Sandbox Code Playgroud)
要将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
}
Run Code Online (Sandbox Code Playgroud)
欢迎任何想法.感谢您的时间.
Ben*_*ich 25
您可能希望与以下map一起使用toDouble:
values.map(x => x.toDouble)
Run Code Online (Sandbox Code Playgroud)
或者更简洁:
values.map(_.toDouble)
Run Code Online (Sandbox Code Playgroud)
对于非双字符串的回退,您可以考虑使用Trymonad(in scala.util):
values.map(x => Try(x.toDouble).getOrElse(1.0))
Run Code Online (Sandbox Code Playgroud)
如果您知道每条线的外观,您还可以进行模式匹配:
values map {
case Array(a, b, c) => Array(a.toDouble, b.toDouble, 1.0)
}
Run Code Online (Sandbox Code Playgroud)