细分列表进入名单列表[复制](Subdivide a list into list of lists

2019-10-21 06:44发布

这个问题已经在这里有一个答案:

  • 拆分列表与固定数量的元素的多个列表 5个回答

我想细分列表到列表清单为每个子列表最大尺寸。 例如,给定List(1,2,5,3,90,3,4,1,0,3)定义为4子表和最大尺寸,我想获得List(List(1,2,5,3), List(90,3,4,1), List(0,3))回来。

这是已经完成:

val l: List[Int] = ???
val subSize: Int = 4
val rest: Int = if(l.size % subSize == 0) 1 else 0

val subdivided: List[List[Int]] = for{
  j <- List.range(0, l.size/subSize - rest, 1)
}yield{
  for{
    i <- List.range(subSize*j,subSize*j+3,1)
    if(i < l.size)
  }yield{
    l(i)
  }
}

是否有这样做的更好,功能更强大的方式?

Answer 1:

是的,有使用grouped

scala> List(1,2,5,3,90,3,4,1,0,3).grouped(4).toList
res1: List[List[Int]] = List(List(1, 2, 5, 3), List(90, 3, 4, 1), List(0, 3))

需要注意的是grouped实际上返回一个Iterator ,这样就可以懒洋洋地遍历集合,而不同时做所有的计算。



文章来源: Subdivide a list into list of lists [duplicate]