0

我尝试对元组使用压缩方法来浏览临时压缩列表

给它一个类似的东西:

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 函数替换,但我想在更复杂的表达式中使用它。

它给了我错误: 参数数量错误;预期 = 2这很有意义,因为 (l1,l2).zipped.map 有两个参数。在内部翻译两个参数映射函数以进行理解的正确方法是什么?

4

2 回答 2

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)
于 2012-05-29T17:29:03.187 回答
1

您不能将压缩版本翻译成for语句,因为for它只是

(l1,l2).zipped.map{ _ match { case (a,b) => a+b } }

andzipped的地图需要两个参数,而不是一个。For 不知道带有两个参数的映射,但它确实知道如何进行匹配。元组正是您将两个参数转换为一个参数所需的,而 zip 将为您创建它们:

for ((a,b) <- (l1 zip l2)) yield a+b

每次迭代都会创建一个额外的对象。在许多情况下,这无关紧要。当它发生时,你最好把它完整地写出来。实际上,您可能会更好地使用Array,至少如果原语功能很重,那么您可以避免装箱并使用索引。

于 2012-05-29T17:53:37.290 回答