Предположим, у меня есть файл журнала событий (посещений) с отметкой времени. Я хотел бы сгруппировать события в сеансы, где я считаю, что события принадлежат одному и тому же сеансу, если они не дальше чем X
минут друг от друга.
В настоящее время я остановился на этом алгоритме.
val s = List(1000, 501, 500, 10, 3, 2, 1) // timestamps
val n = 10 // time span
import scala.collection.mutable.ListBuffer
(s.head +: s).sliding(2).foldLeft(ListBuffer.empty[ListBuffer[Int]]) {
case (acc, List(a, b)) if acc.isEmpty =>
acc += ListBuffer(a)
acc
case (acc, List(a, b)) =>
if (n >= a - b) {
acc.last += b
acc
} else {
acc += ListBuffer(b)
acc
}
}
Результат
ListBuffer(ListBuffer(1000), ListBuffer(501, 500), ListBuffer(10, 3, 2, 1))
Есть ли лучший / функциональный / эффективный способ сделать это?