Je veux créer une méthode Scala qui compte le nombre de caractères consécutifs dans lesquels les valeurs sont les mêmes. J'ai donc cette liste:
Liste ('A', 'A', 'B', 'B') P>
Et je veux retourner quelque chose comme une liste (('A', 2), 'B' , 1) - parce qu'il y a deux caractères avec les mêmes valeurs à côté de l'autre. J'ai eu une bash à cela avec peu de succès: p> reconnaissant pour toutes les directives. P> p>
4 Réponses :
Cela devrait fonctionner.
Je m'attendrais à ce que le code soit auto-expliquant, mais si vous avez une question, ne doutez pas de demander.
compressList(List.empty[Char])
// res: List[(Char, Int)] = List()
compressList(List('a', 'b'))
// res: List[(Char, Int)] = List(('a', 1), ('b', 1))
compressList(List('a', 'a', 'b'))
// res: List[(Char, Int)] = List(('a', 2), ('b', 1))
compressList(List('a', 'a', 'b', 'b', 'b', 'a', 'c'))
// res: List[(Char, Int)] = List(('a', 2), ('b', 3), ('a', 1), ('c', 1))
Utilisez comptez consécutif p> MainMentiment code> et Dwwwwwwilesile code> scala repl h1>
Vous n'avez pas spécifié le comportement souhaité s'il existe plusieurs séquences répétitives du même caractère. En supposant que vous souhaitez seulement la plus longue séquence répétée, le code suivant serait un bon point de départ: exécutant p> sortie: p> L'idée est juste de regarder le caractère actuel de la liste et du caractère précédent. Lorsque le caractère change, le nombre de séquences est arrêté et la longueur de courant est comparée à ce qui est stocké sur la carte. C'est assez simple quand vous venez penser à cela. P> Je pense que cela peut être écrit plus élégamment. Mais cela pourrait être un bon point de départ. P> p>
peut également utiliser span code> au lieu de descendre et à prendre en charge pour éviter une double numérisation
C'est la solution la plus cool car elle peut être facilement modifiée pour couvrir à la fois le cas que seules des séquences répétitives les plus longues sont nécessaires au cas où toutes les séquences répétitives sont nécessaires.
S'il y a deux ou plusieurs chaînes de caractères répétés, voulez-vous seulement que la chaîne la plus longue ou toutes comptait?