2
votes

Joindre l'élément avec le suivant dans un style fonctionnel

J'essaye de trouver un moyen de "joindre" / "groupby" 2 éléments dans une liste comme suit:

List("a","b","c","d")  -> List("ab","bc","cd")

Avec un style fonctionnel.

Est-ce que quelqu'un saurait comment faire cela?

Dois-je utiliser un réducteur, un pliage, un scan ou une autre fonction d'ordre supérieur?


0 commentaires

3 Réponses :


6
votes

Essayez

val xs = List("a","b","c","d")
(xs, xs.tail).zipped.map(_ ++ _) // List(ab, bc, cd)


0 commentaires

5
votes

Vous pouvez utiliser le glissement pour créer une fenêtre:

ab
bc
cd

cela résulte avec

val l = List("a","b","c","d")
val res = l.sliding(2).map(_.reduce(_ + _))
res.foreach(println)


0 commentaires

9
votes

Sliding crée des sous-collections avec fenêtre glissante, il vous suffit alors de mapper ces sous-listes sur des chaînes:

List("a","b","c","d").sliding(2,1).map{case List(a,b) => a+b}


0 commentaires