2016-08-11 8 views
0

リストにいくつかのレコードがあります。 今度は、そのリストから各レコードの一意のキーを持つ新しいマップ(変更可能なマップ)を作成したいと思います。私はリストを読んでこれを達成し、scalaのmapという高次メソッドを呼びたいと思います。ScalaのListの要素を読み込んでマップを作成

records.txtは

100,Surender,2015-01-27 
100,Surender,2015-01-30 
101,Raja,2015-02-19 

私の入力ファイルで予想される出力:

Map(0-> 100,Surender,2015-01-27, 1 -> 100,Surender,2015-01-30,2 ->101,Raja,2015-02-19) 

Scalaのコード:

object SampleObject{ 

    def main(args:Array[String]) ={ 

val mutableMap = scala.collection.mutable.Map[Int,String]() 
var i:Int =0 
val myList=Source.fromFile("D:\\Scala_inputfiles\\records.txt").getLines().toList; 
println(myList) 
val resultList= myList.map { x => 
           { 
           mutableMap(i) =x.toString() 
           i=i+1 
            } 
          } 
println(mutableMap) 

    } 

} 

しかし、私は

Map(1 -> 101,Raja,2015-02-19) 
以下のような出力を取得しています

なぜ最後のレコードだけを保持しているのか理解したい。 誰かが私を助けることができますか?

答えて

1

は、我々は、各ラインの読み取り

(for { 
    (line, i) <- Source.fromFile(filename).getLines.zipWithIndex 
} yield i -> line).toMap 

は、ゼロから始まるインデックス値を関連付け、各関連のうちのマップを作成することを検討してください。

3
ここ
val mm: Map[Int, String] = Source.fromFile(filename).getLines 
    .zipWithIndex 
    .map({ case (line, i) => i -> line })(collection.breakOut) 

(collection.breakOut) toMapによって引き起こされる余分な解析を避けるためです。

+0

この素敵なアプローチのおかげで、私はちょうど私のコードで何がうまくいかなかったのかを知りました。私のコードを再び編集しました。 –