Domanda

Okay, questa domanda sembra davvero stupida, ma il mio punto è che se dai un'occhiata all'API di Scala 2.7.6, hanno reso obsoleto il metodo mappingToString. Pertanto, ci dovrebbe essere un'alternativa più elegante per la stampa di mappe con formattazione personalizzata. Poiché per quasi tutti gli scopi, avere un metodo di equivalenza di mkString in Map è davvero utile.

Cosa ne pensate ragazzi? Qual è lo snippet di codifica per la stampa di una mappa tranne println?

È stato utile?

Soluzione

Il metodo mappingToString è stato utilizzato per modificare il modo in cui ogni coppia di chiave / valore è stata tradotta in String, che è stata quindi utilizzata dal metodo toString .

Penso che sia una pessima forma. Aggiunge una mutabilità a una struttura di dati altrimenti immutabile, per prima cosa. Se hai requisiti di stampa specifici, probabilmente stai meglio inserendoli in un'altra classe.

Altri suggerimenti

mappingToString era specifico di Mappa .

Con il nuovo framework di raccolte in Scala2.8, una Mappa può essere iterata da qualsiasi IterableLike , che estende TraversableLike .

Il metodo mkstring (già lì in 2.7 per Iterable ) deve quindi essere utilizzato.

Vedi questo post di blog " Strings " di Jesse , per 2.7 mkstring () esempi:

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

Puoi anche combinare Iterator.map () con mkString () , ad esempio per creare una stringa di query da una mappa [String, String] :

val queryString = updatedMap.map(pair => pair._1+"="+pair._2).mkString("?","&","")
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top