2009-10-23 26 views
5

Bueno, esta pregunta parece ser realmente estúpida, pero mi punto es que si echas un vistazo a la API de Scala 2.7.6, habrían hecho obsoleto el método mappingToString. Por lo tanto, debería haber una alternativa más elegante para imprimir un mapa con formato personalizado. Dado que para casi cualquier propósito, tener el método de equivalencia de mkString en Map es realmente útil.Cómo imprimir un mapa en Scala

¿Qué piensan ustedes al respecto? ¿Cuál es el fragmento de código para imprimir un mapa, excepto println?

Respuesta

3

El método mappingToString para cambiar la forma cada par de clave/valor se tradujo a String, que luego fue utilizado por el método de toString.

Creo que es un mal ajuste. Agrega una mutabilidad a una estructura de datos que de otro modo sería inmutable, por un lado. Si tiene requisitos de impresión específicos, entonces es mejor que los ponga en otra clase.

+0

Buen punto de ser clase inmutable! – Ekkmanz

2

mappingToString fue específico para Map.

con el marco de nuevas colecciones en Scala2.8, un Map se pueden repetir por cualquier IterableLike, que se extiende TraversableLike.

El método mkstring (ya existe en 2.7 para Iterable) se debe utilizar.

ver este blog post "Strings" by Jesse, durante 2,7 mkstring() ejemplos: se utilizó

/* 
    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

También se puede combinar con Iterator.map()mkString(), por ejemplo, para crear una cadena de consulta de un map[String,String]:

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