Scala 使用其他列表中的元素作为参数,对一个列表中的每个元素应用函数?

Scala 使用其他列表中的元素作为参数,对一个列表中的每个元素应用函数?,scala,Scala,我不知道怎么称呼这个,但我想要这样的东西 val x = List(1,2,3,...) val y = List(4,5,6,...) //want a result of List(1+4, 5+6, 7+8,...) 在scala中有没有一种简单的方法可以做到这一点?我当前的实现涉及使用从0到x.lenght的循环,这非常难看。如果可能的话,我想要一个可以使用n个以上列表的解决方案,也许除了+,还有其他类型的操作符 谢谢 对于“如果我的列表超过3个怎么办?”: 这样使用: scala&g

我不知道怎么称呼这个,但我想要这样的东西

val x = List(1,2,3,...)
val y = List(4,5,6,...)
//want a result of List(1+4, 5+6, 7+8,...)
在scala中有没有一种简单的方法可以做到这一点?我当前的实现涉及使用从0到x.lenght的循环,这非常难看。如果可能的话,我想要一个可以使用n个以上列表的解决方案,也许除了+,还有其他类型的操作符

谢谢

对于“如果我的列表超过3个怎么办?”:

这样使用:

scala> combineAll(List(1,2,3), List(2,2,2), List(4,5,6), List(10,10,10))(_+_)
res5: Seq[Int] = List(17, 19, 21)
编辑:或者

def combineAll[T](xss: Seq[T]*)(f: (T, T) => T) = 
  xss.transpose map (_ reduceLeft f)

做同样的事情,可能效率更高。

,是的,这是重复的。zipWith仍然不在Scala中,Martin的答案仍然有效——而且很简单。谢谢,但如果我有3个以上的列表呢?这些解决方案似乎只限于元组,而元组只能处理三个列表(列表(1,2,3),列表(4,5,6),列表(7,8,9))。压缩映射(++)//产生列表(12,15,18)(编辑:哦,我不知怎么读到了“2个列表”。你是对的,这并没有扩展到第四个列表。)5+6,7+8或2+5,3+6。。。?
def combineAll[T](xss: Seq[T]*)(f: (T, T) => T) = 
  xss.transpose map (_ reduceLeft f)