我尝试使用zipped方法来元组来浏览临时压缩列表
给它类似的东西:
val l1 : List[Int] = List(1,2,3)
val l2 : List[Int] = List(2,3,1)
val l3 : List[Int] = for ( (a,b) <- (l1,l2).zipped ) yield a+b
这是一个合成示例,可能只用map函数替换,但我想在更复杂的表达式中使用它。
它给了我错误:错误的参数数量; expected = 2 这是有意义的,因为(l1,l2).zipped.map有两个参数。将两个参数的映射函数转换为理解的正确方法是什么?
答案 0 :(得分:1)
scala> val l1 : List[Int] = List(1,2,3)
l1: List[Int] = List(1, 2, 3)
scala> val l2 : List[Int] = List(2,3,1)
l2: List[Int] = List(2, 3, 1)
scala> val l3 : List[Int] = for ( (a,b) <- (l1,l2).zip) yield a+b
l3: List[Int] = List(3, 5, 4)
答案 1 :(得分:1)
您无法将压缩版本转换为for
语句,因为for
只是
(l1,l2).zipped.map{ _ match { case (a,b) => a+b } }
和zipped
的地图需要两个参数,而不是一个。因为不知道有两个参数的地图,但它确实知道如何进行匹配。元组正是将两个参数转换为一个所需的,而zip将为您创建它们:
for ((a,b) <- (l1 zip l2)) yield a+b
以每次迭代创建额外对象为代价。在许多情况下,这无关紧要;当它发生时,你最好完全写出来。实际上,你可能更好地使用Array
,至少如果原语很重要,那么你可以避免装箱,并且可以使用索引。