通过阅读Scala中List的元素来创建Map

时间:2016-08-11 10:01:06

标签: scala

我在列表中有一些记录。 现在我想从该列表创建一个新的Map(Mutable Map),每个记录都有唯一的键。我希望实现这一点,我读取一个List并调用scala中名为map的高阶方法。

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)

我想明白为什么它只保留最后一条记录。 有人可以帮助我吗?

2 个答案:

答案 0 :(得分:3)

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

这里(collection.breakOut)是为了避免由toMap引起的额外解析。

答案 1 :(得分:1)

考虑

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

我们读取每一行,将索引值从零开始关联,并从每个关联中创建一个映射。