2009-10-23 10 views
5

D'accord, cette question semble être vraiment stupide, mais mon point est que si vous jetez un oeil sur l'API Scala 2.7.6, ils ont rendu la méthode mappingToString obsolète. Par conséquent, il devrait y avoir une alternative plus élégante pour l'impression de cartes au format personnalisé. Puisque pour presque n'importe quel but, avoir la méthode d'équivalence de mkString dans Map est vraiment pratique.Comment imprimer une carte dans Scala

Qu'en pensez-vous? Quel est votre extrait de code pour imprimer une carte sauf println?

Répondre

3

La méthode mappingToString a été utilisé pour changer la façon dont chaque paire de/valeur de clé a été traduit à la chaîne, qui a ensuite été utilisé par la méthode toString.

Je pense que c'est un mauvais ajustement. Il ajoute une mutabilité à une structure de données par ailleurs immuable, pour une chose. Si vous avez des exigences d'impression spécifiques, alors vous feriez probablement mieux de les mettre dans une autre classe.

+0

Bon point d'être classe immuable! – Ekkmanz

2

mappingToString était spécifique à Map.

Avec les nouvelles collections dans le cadre Scala2.8, un Map peut itérer par IterableLike tout, qui s'étend TraversableLike.

La méthode mkstring (déjà là dans 2.7 pour Iterable) devrait alors être utilisée.

Voir ce blog post "Strings" by Jesse, pour 2,7 mkstring() exemples:

/* 
    Making use of raw strings to create a multi line string 
    I add a | at the beginning of each line so that we can line up the quote nicely 
    in source code then later strip it from the string using stripMargin 
*/ 
scala> val quote = """|I don-t consider myself a pessimist.                         
    |    |I think of a pessimist as someone who is waiting for it to rain. 
    |    |And I feel soaked to the skin. 
    | 
    |    |Leonard Cohen""" 
quote: java.lang.String = 
|I don-t consider myself a pessimist. 
         |I think of a pessimist as someone who is waiting for it to rain. 
         |And I feel soaked to the skin. 

         |Leonard Cohen 

// capilize the first character of each line 
scala> val capitalized = quote.lines. 
    |       map(_.trim.capitalize).mkString("\n") 
capitalized: String = 
|I don-t consider myself a pessimist. 
|I think of a pessimist as someone who is waiting for it to rain. 
|And I feel soaked to the skin. 

|Leonard Cohen 

// remove the margin of each line 
scala> quote.stripMargin   
res1: String = 
I don-t consider myself a pessimist. 
I think of a pessimist as someone who is waiting for it to rain. 
And I feel soaked to the skin. 

Leonard Cohen 

// this is silly. I reverse the order of each word but keep the words in order 
scala> quote.stripMargin.   
    |  lines.    
    |  map(_.split(" "). 
    |    map(_.reverse). 
    |    mkString (" ")). 
    |  mkString("\n") 
res16: String = 
I t-nod redisnoc flesym a .tsimissep 
I kniht fo a tsimissep sa enoemos ohw si gnitiaw rof ti ot .niar 
dnA I leef dekaos ot eht .niks 

dranoeL nehoC 
3

Vous pouvez aussi combiner Iterator.map() avec mkString(), par exemple pour créer une chaîne de requête à partir d'une map[String,String]:

val queryString = updatedMap.map(pair => pair._1+"="+pair._2).mkString("?","&","") 
Questions connexes