Продолжая работать номер в Scala - PullRequest
0 голосов
/ 21 октября 2019

Не стесняйтесь редактировать заголовок этого поста.

Учитывая это:

case class Foo(amount: Int, running: Int)
val seed = List(Foo(10, 10), Foo(5, 15), Foo(10, 25))
val next = List(20, 10, 15)

Как мне сопоставить next с List(Foo(20, 45), Foo(10, 55), Foo(15, 70)) способом Scala? Как видите, он продолжает работать под номером.

1 Ответ

1 голос
/ 22 октября 2019

Вот несколько разных подходов, основанных на scanLeft:

val initial = seed.map(_.amount).sum
next
  .zip(next.scanLeft(initial)(_ + _))
  .map((Foo.apply _).tupled)

и

val initial = Foo(0, seed.map(_.amount).sum)
next
  .scanLeft(initial){
    case (Foo(_, total), n) =>
      Foo(n, total + n)}
  .tail

, вы также можете рассмотреть решение с помощью рекурсии.

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