Scala 将列表分组

Scala 将列表分组,scala,Scala,我想对列表中的元素进行分组,例如: 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到lst.size映射lst.take)。toList应该这样做。您可以这样做: lst.inits.toList.reverse.tail 做一个foldLeft似乎效率更高,尽管很难看:

我想对列表中的元素进行分组,例如:

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到lst.size映射lst.take)。toList
应该这样做。

您可以这样做:

lst.inits.toList.reverse.tail 

做一个
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
。哇!Scala系列万岁!这比我的回答更地道:)我完全发现了一些东西,谢谢