2016-12-11 7 views
1

私はScalaには新しく、現在intのリストで表されるテストスコアで名前を表す文字列をマップする必要があるアプリケーションを作成しています。スカラのマップにテキストファイルを分ける

基本的に私は、次の情報を持っている:という名前のテキストファイル内

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

scores.txtすなわち

val mapData = readTextFile("scores.txt") 

、私は一人一人が、このスコアとマッピングした後、これを分割していますよintの文字列とリストに変換します。私は現在、txtファイルを入力として受け取るreadTextFileという名前の関数を持っています。そこからは、ちょっと困惑しています。

私はそれが次のように似ているはずですが、私はそれを得ることはできません。

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 
} 

ご協力いただければ幸いです。

事前に感謝して、スティーブン。

答えて

1

この行を修正する必要があります。 splitline.tail.head.toIntは各行の2番目の要素のみを取得します。あなたはList[Int]splitlineの尾をマッピングし、変換したい:

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

私がペアを作るためにライン上の理解のために使用することをお勧めして、マップに変換:

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 
} 
関連する問題