如何使用成员作为谓词的计算将集合拆分为组

时间:2016-07-29 10:45:02

标签: scala scala-collections

我有一个收集连续数字的方法,其差值不超过一些数字(在我的例子中为2)。这段代码工作得很好,但每次调用时都会压缩,所以我想知道是否有更好的解决方案,谢谢。

def myGrouper(sortedData: Seq[Int], maxDif: Int): Seq[Seq[Int]] = sortedData match {
  case Nil => Nil
  case _ =>
    val (grouped, rest) = sortedData.zipWithIndex.span{
    case (num, idx) =>
      if (idx > 1) Math.abs(sortedData(idx-1) - num) <= maxDif
      else true
  }
    Seq(grouped.map(_._1)) ++ myGrouper(rest.map(_._1), maxDif)
}

val myList = Seq(1, 2, 3, 7, 8, 10, 15, 17, 19)
val maxDif = 2
println(myGrouper(myList, maxDif))

以下是运行此代码的结果

myList: Seq[Int] = List(1, 2, 3, 7, 8, 10, 15, 17, 19)
maxDif: Int = 2
List(List(1, 2, 3), List(7, 8, 10), List(15, 17, 19))
res0: Unit = ()

0 个答案:

没有答案