Scala - Scanleft, возвращая значения в течение итераций, не используя его в следующем ходу - PullRequest
0 голосов
/ 19 сентября 2018

У меня есть список

, который я хотел бы сделать, это

def someRandomMethod(...): ... = {
  val list = List(1, 2, 3, 4, 5)
  if(list.isEmpty) return list
  list.differentScanLeft(list.head)((a, b) => {
     a * b
  })
}

, который возвращает список (1, 2, 6, 12, 20), а не список (1, 2, 6, 24, 120)

Есть ли такой API?

Спасибо, Космир

Ответы [ 2 ]

0 голосов
/ 19 сентября 2018

scan не совсем правильный метод для этого, вы хотите использовать sliding для генерации списка соседних пар значений:

(1::list).sliding(2).map(l => l(0)*l(1))

В общем случае иногда необходимо передатьданные для следующей итерации при использовании scan.Стандартное решение для этого состоит в том, чтобы использовать кортеж (state, ans), а затем отфильтровать состояние с другим map в конце.

0 голосов
/ 19 сентября 2018

Вы, вероятно, хотите использовать zip

val list = List(1,2,3,4,5,6)
val result = list.zip(list.drop(1)).map{case (a,b) => a*b}
println(result)

> List(2, 6, 12, 20, 30)
...