2016-12-11 1 views
1

Ich bin ziemlich neu in Scala, und ich erstelle derzeit eine App, wo ich eine Zeichenfolge zuordnen muss, die einen Namen mit Testergebnissen darstellt, die durch eine Liste von Ints dargestellt werden.Textdatei in Karte trennen In Scala

Im Prinzip habe ich die folgenden Informationen:

Neil, 68, 79, 90 
Buzz, 81, 52, 65 
Michael, 95, 92, 81 

in einer Textdatei mit dem Namen scores.txt dh

val mapData = readTextFile("scores.txt") 

und ich suche diese nach jeder Person Punktzahl aufzuspalten und auf Karte zu einer Zeichenfolge und einer Liste von Ints. Ich habe derzeit eine Funktion namens readTextFile, die die TXT-Datei als Eingabe nehmen und von dort bin ich ein wenig ratlos.

Ich weiß, es sollte ähnlich wie folgt sein, aber ich kann es nicht ganz bekommen.

def readTextFile(filename: String): Map[String, List[Int]] = { 
    var mapBuffer: Map[String, List[Int]] = Map() 
    try { 
    for (line <- Source.fromFile(filename).getLines()) { 
     val splitline = line.split(",").map(_.trim).toList 

     // add element to map buffer 
     mapBuffer = mapBuffer ++ Map(splitline.head -> splitline.tail.head.toInt) 
    } 
    } catch { 
    case ex: Exception => println("Sorry, an exception happened.") 
    } 
    mapBuffer 
} 

Jede Hilfe würde sehr geschätzt werden.

Vielen Dank im Voraus, Steven.

Antwort

1

Sie müssen diese Zeile beheben. splitline.tail.head.toInt erhält nur das zweite Element in jeder Zeile. Sie wollen Karte und den Schwanz des splitline-List[Int] zu konvertieren:

mapBuffer = mapBuffer ++ Map(splitline.head -> splitline.tail.map(_.toInt)) 
1

Ich empfehle für das Verständnis über die Leitungen Paare zu machen und sie dann auf einer Karte Umwandlung:

def readTextFile(filename: String) = { 
    val pairs = 
    for { 
     line <- Source.fromFile(filename).getLines() 
     split = line.split(",").map(_.trim).toList 
     name = split.head 
     scores = split.tail.map(_.toInt) 
    } yield (name -> scores) 
    pairs.toMap 
}