我想将列表细分为每个子列表的最大大小的列表。例如,给定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)
}
}
有没有更好,更实用的方法呢?
答案 0 :(得分:4)
是的,使用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
,这样您就可以懒惰地遍历集合,而无需立即执行所有计算。