使用循环在 Scala 中创建地图

αƞj*_*jiβ 2 dictionary for-loop scala 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)
}
Run Code Online (Sandbox Code Playgroud)

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

Sea*_*ira 6

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

val resultMap = sourceList.map(item => (item._1, someFunction(item._1))).toMap
Run Code Online (Sandbox Code Playgroud)

或者,以一元的方式:

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

val resultMap = listOfTuples.toMap
Run Code Online (Sandbox Code Playgroud)

另外,如果你想避免的创建listOfTuples可以通过调用进行转型慵懒的一个.viewsourceList,然后调用toMap

val resultMap = sourceList.view
                          .map(item => (item._1, someFunction(item._1)))
                          .toMap
Run Code Online (Sandbox Code Playgroud)

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