分组列表

时间:2016-09-02 14:27:07

标签: 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)) 

4 个答案:

答案 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))