您可以摺疊做到這一點:
case class Test(dayOfWeek: Int, b: Int = scala.util.Random.nextInt)
val data = (3 to 100).map(_ % 7).map(Test(_))
val spans =
data.foldLeft(Vector(Vector.empty[Test])) {
case (zs :+ z, e) =>
if (e.dayOfWeek == 0)
if (z.nonEmpty)
(zs :+ z) :+ Vector(e)
else
zs :+ Vector(e)
else
zs :+ (z :+ e)
}
for ((g, i) <- spans.zipWithIndex) {
println(f"Group $i: (${g.map(_.dayOfWeek).mkString(",")})")
}
輸出:
Group 0: (3,4,5,6)
Group 1: (0,1,2,3,4,5,6)
Group 2: (0,1,2,3,4,5,6)
Group 3: (0,1,2,3,4,5,6)
Group 4: (0,1,2,3,4,5,6)
Group 5: (0,1,2,3,4,5,6)
Group 6: (0,1,2,3,4,5,6)
Group 7: (0,1,2,3,4,5,6)
Group 8: (0,1,2,3,4,5,6)
Group 9: (0,1,2,3,4,5,6)
Group 10: (0,1,2,3,4,5,6)
Group 11: (0,1,2,3,4,5,6)
Group 12: (0,1,2,3,4,5,6)
Group 13: (0,1,2,3,4,5,6)
Group 14: (0,1,2)
是的,這是我尋找的優雅! –
@如果其中一個答案滿足你,考慮接受它(http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work)。 – Utaal