web-dev-qa-db-fra.com

Chaîne de rendement de la liste [Caractère]

J'ai un l: List [Char] de caractères que je veux concaténer et retourner sous forme de chaîne en une boucle.

J'ai essayé

val x: String = for(i <- list) yield(i)

menant à

 error: type mismatch;  
 found   : List[Char]  
 required: String

Alors, comment puis-je changer le type de rendement du résultat?

Merci!

31
xyz

Essaye ça:

val x: String = list.mkString

Cette syntaxe:

for (i <- list) yield i

est du sucre syntaxique pour:

list.map(i => i)

et renverra ainsi une copie inchangée de votre list d'origine.

69

Vous pouvez utiliser les éléments suivants:

val x: String = (for(i <- list) yield(i))(collection.breakOut)

Voir cette question pour plus d'informations sur breakOut.

3
Daniel C. Sobral

Vous pouvez utiliser l'une des trois surcharges mkString. Fondamentalement, il convertit une collection en une chaîne plate par la méthode toString de chaque élément. Les surcharges ajoutent des séparateurs personnalisés entre chaque élément.

C'est la méthode d'un Iterable, vous pouvez donc également l'utiliser dans Map ou Set.

Voir http://www.scala-lang.org/api/2.7.2/scala/Iterable.html pour plus de détails.

1
jfuentes