ListのListで、前後の差分のListをつくる

状態遷移の記録をしたいとき、例えばこういうリストがあるときに

@ val l = List(List(1, 2, 3, 4, 5), List(3, 4, 5), List(5))

5個あった要素が、3個になり、1個になった、という遷移を、

  • 2番目の処理で1と2が落ち、
  • 3番目の処理で3と4が落ちた

というように表現したいとき。

@ (l(0) :: l, l).zipped.map(_ diff _)
res3: List[List[Int]] = List(List(), List(1, 2), List(3, 4))

要素を一個ずつずらしたリストと元のリストをタプルにして、zipしてそのdiffをとる。 もっとうまい方法があるかも。

参考:

How to map a list of numbers to the list of their deltas in Scala? - Stack Overflow