Scala итерация по двум последовательным элементам списка - PullRequest
0 голосов
/ 22 апреля 2020

Как бы мы перебрали два последовательных элемента списка и применили разностную функцию? Например, у меня есть это:

val list = List(List("Eat", "Drink", "Sleep", "work"), List("Eat", "Sleep", "Dance"))

Я хочу перебрать эти два последовательных элемента и вычислить разницу

Я пробовал это, но я не знаю, как перебирать каждые два последовательных элемента

list.map((a,b) => a.diff(b))

вывод должен быть List("Drink", "work")

Ответы [ 3 ]

2 голосов
/ 22 апреля 2020

Если я правильно понимаю, вы, вероятно, хотите перебирать скользящее окно.

list.sliding(2).map{
  case List(a, b) => a.diff(b)
  case List(a) => a
}.toList

В качестве альтернативы вы также можете захотеть grouped(2), который вместо этого разбивает список на группы.

1 голос
/ 22 апреля 2020

В вашем случае совпадение может работать безупречно:

val list = List(List("Eat", "Drink", "Sleep", "work"), List("Eat", "Sleep", "Dance"))
list match { case a :: b :: Nil => a diff b}

Если в списке не всегда есть 2 элемента, у вас также должен быть универсальный случай в совпадении

1 голос
/ 22 апреля 2020
def main(args: Array[String]): Unit = {
    val list = List(List("Eat", "Drink", "Sleep", "work"), List("Eat", "Sleep", "Dance"));
    val diff = list.head.diff(list(1))
    println(diff)
  }
...