list - 如何在scala中按周将列表分成组

标签 list scala split

case class Test(dayOfWeek:Int,b:Int=Random.nextInt)
val data=(3 to 100).map(_ % 7).map(Test(_))

如何将数据分组,每组有一周的数据,如果一周不完整,也有一组。所以这个组应该是
Group 1: (3,4,5,6)   // the number here is the dayOfWeek
Group 2: (0,1,2,3,4,5,6)
Group 3: (0,1,2,3,4,5,6)
...
last Group:(0,1,2)

最佳答案

Scala 的集合非常强大,这应该在几行中完成:

val (firstWeek, nextWeeks) = data.span(_.dayOfWeek != 0)
val weeks = (firstWeek :: nextWeeks.grouped(7).toList).dropWhile(_.isEmpty)

查看 span 的文档和 grouped here .
println(weeks.zipWithIndex.map {
  case (week, i) => s"Group $i: (${week.map(_.dayOfWeek).mkString(",")})"
}.mkString("\n"))

输出:
Group 0: (3,4,5,6)
Group 1: (0,1,2,3,4,5,6)
Group 2: (0,1,2,3,4,5,6)
[snip]
Group 12: (0,1,2,3,4,5,6)
Group 13: (0,1,2,3,4,5,6)
Group 14: (0,1,2)

关于list - 如何在scala中按周将列表分成组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24924409/

相关文章:

arrays - 使用 astropy 和 numpy 处理非常大的数组

Scala Bitset 到BitMask 转换

scala - Scala类型延迟

Haskell 中的每个字符将字符串分为 6 部分

python - 如何在保留冗余值的同时将元组列表转换为字典?

python - 将列表转换为字符串

python - 根据括号位置对 pandas 数据帧值使用 str.split

ruby-on-rails - RoR 在两列中显示元素

python - 根据某些字符将列表拆分为更小的列表

scala - 使用 Scala 的 Play 2.x 应用程序中的 Spring Data Neo4j