2016-07-13 15 views
1

Ich habe die folgende Liste von Strings in Scala und ich möchte es in ein List(List(Int)) konvertieren: Wie konvertiert man String in eine Liste von ganzen Zahlen in Scala?

val listOfLines = ("1 2 3 6 9", 
        "1 2 4 5 6", 
        "1 2 8 8 4", 
        "2 3 6 5 4", 
        "2 4 3 9 7") 

und ich möchte es konvertieren, wie sein:

   ((1,2,3,6,9), 
       (1,2,4,5,6), 
       (1,2,8,8,4), 
       (2,3,6,5,4), 
       (2,4,3,9,7)) 

Wie kann ich so etwas tun .. ich habe versucht:

val list = listOfLines.foreach(_.map{(_.split("\t"))}.toList)

aber es gibt mir Fehler .. irgendwelche Vorschläge?

+2

Ihr Beispiel 'listOfLines' ist ein Tuple, vielleicht das Wort' list' vor der Klammer haben soll? –

Antwort

2

Wenn Sie auf einem beliebigen Leerzeichen aufteilen möchten, dass Sie dies auch tun könnte:

listOfLines.map(_.split("\\s+").map(_.toInt).toList) 

Auf diese Weise müssen Sie nicht auf verlassen Sie sich dort nur \t Zeichen drin.

Dies setzt voraus, dass Ihre Eingabe

val listOfLines = List("1 2 3 6 9", 
    "1 2 4 5 6", 
    "1 2 8 8 4", 
    "2 3 6 5 4", 
    "2 4 3 9 7") 

ist wie in Ihrer Frage zu dem Tupel Gegensatz

1

Schließlich kann die Antwort :) sein

val list = listOfLines.map(_.split("\t").toList.map(_.toInt)) 
1

Wenn Sie Tuple bei der ersten Verwendung Sie es List konvertieren müssen: listOfLines.productIterator.toList und Sie werden Erhalte List[Any], denn Tuple kann aus verschiedenen Typen bestehen, weshalb productIteratorIterator[Any] zurückgibt. Und jetzt können Sie map es, aber nicht foreach, Ursache foreach gibt Unit zurück. So , Ergebnis:

val res = listOfLines.productIterator.toList 
    .map{ 
    _.toString.split("\\s+") 
    .map(_.toInt) 
    .toList 
    } 
Verwandte Themen