用于检查列表是否没有间隙的函数

时间:2011-08-03 12:54:21

标签: list function scala scala-collections

我只想要一个函数,如果true的所有元素互相依赖,则返回List[Integer],即

noGaps(List(3,4,5)) // true
noGaps(List(4,3,5)) // false
noGaps(List(3,4,6)) // false

我有一些有用的东西,但它有点冗长 - 什么是最优雅的解决方案?

3 个答案:

答案 0 :(得分:12)

这个怎么样?

def noGaps(xs: Seq[Int]) =
  xs.size < 2 || xs.sliding(2).forall { case Seq(x, y) => y == x + 1 }

答案 1 :(得分:0)

def noGaps(xs: Seq[Int]) = xs.isEmpty||xs.tail == xs.map(_+1).init

答案 2 :(得分:0)

您可以明确地将ListRange进行比较:

def noGaps(l: Seq[Int]): Boolean =
  l.isEmpty || l.sameElements(l.head to l.last)

请注意,尽管优雅,但由于l.lastO(n),因此效率略低于sliding solution。如果n是列表的大小,并且i是存在间隙的第一个元素(如果没有间隙,则是n),则将在{{1 }}步骤,而这一步则以i步骤执行。

相关问题