Scala迭代两个序列并附加到列表中

use*_*248 1 mapping scala

我有以下方法签名,旨在组合来自两个不同序列的元素:

def newMap(local: Seq[String], passed: Seq[(String, Int)]): Map[String, Int] = {


}
Run Code Online (Sandbox Code Playgroud)

在这种情况下,来自值local的字符串应该是默认值0的键.是否可以使用for-comprehension同时循环这两个序列,条件是为第一个序列添加默认值0地图中的序列?我也试图在这里不使用可变变量.

Nik*_*kov 6

def newMap(local: Seq[String], passed: Seq[(String, Int)]): Map[String, Int] = 
  (local.view.map((_, 0)) ++ passed.view).toMap
Run Code Online (Sandbox Code Playgroud)

在上面的代码中,view我们首先将输入集合转换为它们的延迟包装器,而不是立即执行所有以下操作来累积它们,并且只有在强制进入某个严格版本时才执行它们.这使我们能够执行所有操作(map,++,toMap在引擎盖下单遍历).最终toMap迫使我们的懒人收集对严格Map.