Группировка элементов списка путем сравнения их с соседями
Каков наиболее элегантный способ группировки списка значений в группы на основе значений соседей?
В более широком контексте у меня есть список строк, которые нужно сгруппировать в абзацы. Я хочу сказать, что если вертикальная разница между двумя линиями ниже порога, они находятся в одном и том же абзаце.
В итоге я решил эту проблему по-разному, но меня интересует правильное решение здесь.
case class Box(y: Int)
val list = List(Box(y=1), Box(y=2), Box(y=5))
def group(list: List[Box], threshold: Int): List[List[Box]] = ???
val grouped = group(list, 2)
> List(List(Box(y=1), Box(y=2)), List(Box(y=5)))
Я смотрел наgroupBy()
, но это может работать только с одним элементом одновременно. Я также попробовал подход, который включал различия перед вычислением, используяsliding()
, но тогда становится неудобно извлекать элементы из исходной коллекции.