Sono un principiante del linguaggio di programmazione funzionale e sto imparando a Scala per un progetto universitario.Scala - converti matrice [stringa] in matrice [doppia]
Questo può sembrare semplice, ma non riesco a trovare abbastanza aiuto online per questo o un modo semplice per farlo: come posso convertire un array [stringa] in matrice [doppio]? Ho un file CSV che, quando letto nel REPL, viene interpretato come valori String (ogni riga del file ha una combinazione di valori interi e stringa) che restituirebbe un tipo Array [String]. Voglio codificare i valori stringa con valori double/int per restituire l'array [Double] al fine di rendere l'array omogeneo. C'è un modo semplice per farlo? Qualsiasi guida sarà molto apprezzata.
Quello che ho fatto fino ad ora è:
def retrieveExamplesFromFile(fileName : String) : Array[Array[String]] = {
val items = for {
line <- Source.fromFile(fileName).getLines()
entries = line.split(",")
} yield entries
return items.toArray
}
Il formato di ogni riga (restituito come String []) è così:
[[1.0, 2.0, item1], [5, 8.9, item2],....]
E per convertire ogni riga nel file CSV in doppio array, ho solo una definizione pseudo redatta in modo:
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
}
Tutte le idee sono benvenute. Grazie per il tuo tempo.
L'istruzione getOrElse o il pattern matching funzionano meglio per me. Tuttavia, volevo sapere se posso aggiungere un contro a questo piuttosto che restituire solo 1.0 tutto il tempo? Ho sentito parlare di Range (n1, n2) ma non è quello che sto cercando, sto cercando un contatore perché voglio che item1 e item2 abbiano numeri diversi (forse consecutivi). È possibile? –
Certo - puoi mettere qualunque logica tu voglia nella clausola 'getOrElse'. Ad esempio, è possibile creare un iteratore 'val fallbackIterator = Iterator.from (0)', e quindi usare 'getOrElse (fallbackIterator.next)', in modo che ogni chiamata successiva a 'getOrElse' aumenti il valore di fallback. –
Stavo cercando quello Prova monade: non lo sapevo in scala.util. v bella risposta qui. – javadba