使用循环在Scala中创建Map

时间:2015-07-10 15:48:47

标签: scala for-loop dictionary intellij-idea

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

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的正确方法是什么。有什么建议吗?

1 个答案:

答案 0 :(得分:3)

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

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

或者,以monadic方式:

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

val resultMap = listOfTuples.toMap

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

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

最后,如果您真的想避免生成额外的对象,可以使用mutable Map代替,并使用+=.put

将关键字和值附加到其中