我想对列表的元素进行分组,例如:
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))
答案 0 :(得分:4)
你可以这样做:
lst.inits.toList.reverse.tail
答案 1 :(得分:3)
(1 to lst.size map lst.take).toList
应该这样做。
答案 2 :(得分:0)
做一个foldLeft
似乎更有效率,虽然丑陋:
(lst.foldLeft((List[List[Int]](), List[Int]()))((x,y) => {
val z = x._2 :+ y;
(x._1 :+ z, z)
}))._1
答案 3 :(得分:0)
不像其他人那样漂亮或短暂,但必须为灵魂做一些尾递归:
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))