【问题标题】:Create Map in Scala using loop使用循环在Scala中创建地图
【发布时间】:2015-07-10 15:48:46
【问题描述】:

在获取列表中每个项目的结果后,我正在尝试创建地图。到目前为止,这是我尝试过的:

val sourceList: List[(Int, Int)] = ....
val resultMap: Map[Int, Int] = for(srcItem <- sourceList) {
  val result: Int = someFunction(srcItem._1)
  Map(srcItem._1 -> result)
}

但是我在IntelliJ 中遇到类型不匹配错误,而且我绝对没有在这里编写正确的语法。我不认为我可以使用yield,因为我不想要地图列表。使用 for 循环创建 Map 的正确方法是什么。有什么建议吗?

【问题讨论】:

    标签: scala for-loop dictionary intellij-idea


    【解决方案1】:

    最简单的方法是从元组列表中创建地图:

    val resultMap = sourceList.map(item => (item._1, someFunction(item._1))).toMap
    

    或者,以单子方式:

    val listOfTuples = for {
      (value, _) <- sourceList
    } yield (value, someFunction(value))
    
    val resultMap = listOfTuples.toMap
    

    或者,如果您想避免创建listOfTuples,您可以通过在sourceList 上调用.view 然后调用toMap 来使转换成为惰性转换:

    val resultMap = sourceList.view
                              .map(item => (item._1, someFunction(item._1)))
                              .toMap
    

    最后,如果你真的想避免生成额外的对象,你可以改用mutable Map 并使用+=.put 将键和值附加到它上面

    【讨论】:

      猜你喜欢
      • 2012-05-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多