Pregunta

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

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

¿Fue útil?

Solución

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

Creo que es un ataque horrible. Agrega una mutabilidad a una estructura de datos por lo demás inmutable, por un lado. Si tiene requisitos de impresión específicos, probablemente sea mejor que los coloque en otra clase.

Otros consejos

mappingToString era específico de Map .

Con el nuevo marco de colecciones en Scala2.8, un Mapa puede ser iterado por cualquier IterableLike , que se extiende a TraversableLike .

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

Consulte esta publicación del blog " Cadenas " por Jesse , para 2.7 mkstring () ejemplos:

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

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

val queryString = updatedMap.map(pair => pair._1+"="+pair._2).mkString("?","&","")
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top