v:A, right: Option[AContainer]), есть a:Seq[A], нужно получить d:Seq[AContainer], где left и right у элементов - ссылки на элементы левее и правее.
Сделал так:
val b=a.map(AContainer(None,_,None))
val c=b.foldLeft(List[AContainer]())((acc, cur)=>cur.copy(left = acc.headOption) :: acc)
val d=c.foldLeft(List[AContainer]())((acc, cur)=>cur.copy(right = acc.headOption) :: acc).reverse
типо, сначала пробегаем слева направо и обновляем левые ссылки, потом справа налево, чтобы обновить правые.
Норм решение?
Напоминает структуру данных Zipper, чекни может она тебе подойдет
напрашивается рекурсия
Обсуждают сегодня