Si j'ai une carte et que je souhaite construire une chaîne de itération de celui-ci, est-il un moyen d'avoir la chaîne finale résultant d'une expression au lieu de définir une variable et de modifier cela à l'intérieur d'une boucle?
au lieu de ce p> je préférerais que ce soit p>
5 Réponses :
Vous pouvez le faire avec un pli:
scala> myMap.foldLeft("") { (s: String, pair: (String, String)) =>
| s + pair._1 + pair._2
| }
res0: java.lang.String = 1234
Potentiellement beaucoup de concaténation de chaînes coûteuses là-bas si la carte atteint une grande taille.
C'est vrai. Si la concaténation est tout ce que vous êtes après, utilisez mkstring code> comme dans la réponse de Daniel ou de Kevin.
Je suis assez nouveau à Scala, mais vous pouvez essayer réduceleft code>. Il accumule une valeur partielle (la chaîne étant jointe à chaque élément). Par exemple, si vous voulez les touches (ou les valeurs) jointes dans une chaîne, faites simplement: val s = myMap.keys.reduceLeft( (e, s) => e + s)
@Kevin, haha, oui, tu as raison. J'ai dit que j'étais assez nouveau à Scala :)
Je voudrais juste mappe code> et mkstring code>. Par exemple:
Quant à la réponse de Daniel, mais avec quelques optimisations et mes propres préférences de formatage:
val myMap = Map("1" -> "2", "3"->"4")
val s = myMap.view map {
case (key, value) => "Key: " + key + "\nValue: " + value
} mkString ("", "\n", "\n")
Cela fonctionne également bien si vous ne vous inquiétez pas de votre propre formatage:
scala> Map("1" -> "2", "3"->"4").mkString(", ")
res6: String = 1 -> 2, 3 -> 4