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

Что я хотел бы сделать, это

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

Который возвращает List (1, 2, 6, 12, 20), а не List (1, 2, 6, 24, 120)

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

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

0
cosmir17 19 Сен 2018 в 12:13

2 ответа

Лучший ответ

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

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

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

0
Tim 19 Сен 2018 в 10:04

Возможно, вы захотите использовать 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)
0
Nazarii Bardiuk 19 Сен 2018 в 10:02