Я хочу, чтобы группировать элементы списка, такие как:Группировка списка
val lst = List(1,2,3,4,5)
О преобразовании он должен вернуть новый список, как:
val newlst = List(List(1), List(1,2), List(1,2,3), List(1,2,3,4), Lis(1,2,3,4,5))
Я хочу, чтобы группировать элементы списка, такие как:Группировка списка
val lst = List(1,2,3,4,5)
О преобразовании он должен вернуть новый список, как:
val newlst = List(List(1), List(1,2), List(1,2,3), List(1,2,3,4), Lis(1,2,3,4,5))
(1 to lst.size map lst.take).toList
должен это сделать.
Двигаемся foldLeft
кажется более эффективным, хотя и некрасиво:
(lst.foldLeft((List[List[Int]](), List[Int]()))((x,y) => {
val z = x._2 :+ y;
(x._1 :+ z, z)
}))._1
Не так хороша, или коротким, как другие, но нужно иметь какой-то хвост рекурсии для души:
def createFromElements(list: List[Int]): List[List[Int]] = {
@tailrec
def createFromElements(l: List[Int], p: List[List[Int]]): List[List[Int]] =
l match {
case x :: xs =>
createFromElements(xs, (p.headOption.getOrElse(List()) ++ List(x)) :: p)
case Nil => p.reverse
}
createFromElements(list, Nil)
}
А теперь:
scala> createFromElements(List(1,2,3,4,5))
res10: List[List[Int]] = List(List(1), List(1, 2), List(1, 2, 3), List(1, 2, 3, 4), List(1, 2, 3, 4, 5))
Было бы неплохо увидеть, что вы пробовали в первую очередь: '(от 1 до lst.length) .map (i => lst.take (i)). ToList'. –