通过在Scala中读取列表元素创建地图

通过在Scala中读取列表元素创建地图,scala,Scala,我在一张单子上有一些记录。 现在我想从该列表中创建一个新的映射(可变映射),每个记录都有一个唯一的键。我想通过读取列表并调用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

我在一张单子上有一些记录。 现在我想从该列表中创建一个新的映射(可变映射),每个记录都有一个唯一的键。我想通过读取列表并调用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)
我想了解它为什么要单独保留最后一条记录。 有人能帮我吗?

考虑一下

(for {
  (line, i) <- Source.fromFile(filename).getLines.zipWithIndex
} yield i -> line).toMap
(用于{
(行,i)行
在这里,我们读取每一行,从零开始关联一个索引值,并从每个关联中创建一个映射。

考虑

(for {
  (line, i) <- Source.fromFile(filename).getLines.zipWithIndex
} yield i -> line).toMap
val mm: Map[Int, String] = Source.fromFile(filename).getLines
  .zipWithIndex
  .map({ case (line, i) => i -> line })(collection.breakOut)
(用于{
(行,i)行
在这里,我们读取每一行,关联一个从零开始的索引值,并从每个关联中创建一个映射

val mm: Map[Int, String] = Source.fromFile(filename).getLines
  .zipWithIndex
  .map({ case (line, i) => i -> line })(collection.breakOut)
这里的
(collection.breakOut)
是为了避免toMap造成的额外解析


这里是
(collection.breakOut)
是为了避免toMap造成的额外解析。

非常感谢这种简洁的方法,我也刚刚发现了我的代码中的错误,只是再次编辑了我的代码,它成功了。再次感谢Hanks这种简洁的方法,我也刚刚发现了我的代码中的错误,只是再次编辑了我的代码,它成功了。再次感谢