Применить функцию к каждому элементу в одном списке, используя элемент из списка других в качестве аргумента? - PullRequest
4 голосов
/ 30 ноября 2011

Я не уверен, как это назвать, но я хочу что-то подобное.

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-й номер списка и, возможно, с оператором другого типа, кроме +.

Спасибо!

1 Ответ

8 голосов
/ 30 ноября 2011

В ответ на вопрос «что, если у меня более 3 списков?»:

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

Используйте вот так:

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)

edit: в качестве альтернативы

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

делает то же самое и, вероятно, более эффективно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...