Scala - convert Array[String] to Array[Double]

arrays, functional-programming, scala

Solution

You probably want to use `map` along with `toDouble`:

values.map(x => x.toDouble)

Or more concisely:

values.map(_.toDouble)

And for the fallback for non-double strings, you might consider using the `Try` monad (in `scala.util`):

values.map(x => Try(x.toDouble).getOrElse(1.0))

If you know what each line will look like, you could also do pattern matching:

values map { 
    case Array(a, b, c) => Array(a.toDouble, b.toDouble, 1.0)
}

Problem

I am a newbie to functional programming language and I am learning it in Scala for a University project. This may seem simple, but I am unable to find enough help online for this or a straightforward way of doing this - how can I convert an Array[String] to Array[Double]? I have a CSV file which, when read into the REPL is interpreted as String values (each line of the file has a mix of integer and string values) which would return a type Array[String]. I want to encode the string values with a double/int values to return Array[Double] in order to make the array homogeneous. Is there a straightforward way of doing this? Any guidance will be much appreciated. What I have done until now is: ``` def retrieveExamplesFromFile(fileName : String) : Array[Array[String]] = { val items = for { line <- Source.fromFile(fileName).getLines() entries = line.split(",") } yield entries return items.toArray } ``` The format of each line (returned as String[]) is so: ``` [[1.0, 2.0, item1], [5, 8.9, item2],....] ``` And to convert each line in the CSV file into double array, I only have a psuedo definition drafted so: ``` 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 } ``` Any ideas are welcome. Thank you for your time.

Original source