【问题标题】:Creating a Map by reading elements of List in Scala通过在 Scala 中读取 List 的元素来创建 Map
【发布时间】:2016-08-11 10:01:06
【问题描述】:

我在 List 中有一些记录。 现在我想从该列表中创建一个新的 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)

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

【问题讨论】:

    标签: scala


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

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

    【讨论】:

    • 非常感谢这种简洁的方法,我也刚刚发现我的代码出了什么问题,只是再次编辑了我的代码并且它工作了。再次感谢
    【解决方案2】:

    考虑

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-07-19
      • 1970-01-01
      • 2021-01-14
      • 2017-12-28
      • 1970-01-01
      • 2021-05-30
      • 1970-01-01
      相关资源
      最近更新 更多