4 votes

Fonction permettant de vérifier si une liste ne comporte pas de lacunes

Je veux juste une fonction qui renvoie true si tous les éléments d'un List[Integer] se suivent, c'est-à-dire

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

J'ai quelque chose qui fonctionne, mais c'est un peu verbeux - quelle est la solution la plus élégante ?

13voto

Jean-Philippe Pellet Points 25240

Que pensez-vous de ceci ?

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

0voto

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

0voto

Xavier Guihot Points 6414

Vous pouvez préciser que vous comparez les List à un Range :

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

Il convient de noter que, bien que les élégant Cette méthode est légèrement moins efficace que la méthode solution de glissement , en raison de l.last qui est O(n) . Si n est la taille de la liste et i le premier élément pour lequel il y a une lacune (ou n s'il n'y a pas d'écart), alors la solution de glissement serait exécutée en i alors que celle-ci est réalisée en n + i étapes.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X