2009-10-23 20 views
5

Ok, questa domanda sembra essere davvero stupida, ma il mio punto è che se date un'occhiata all'API di Scala 2.7.6, hanno reso deprecato il metodo mappingToString. Pertanto, ci dovrebbe essere un'alternativa più elegante per la stampa di mappe con formattazione personalizzata. Dal momento che per quasi tutti gli scopi, avere il metodo di equivalenza di mkString in Map è davvero utile.Come stampare una mappa in Scala

Cosa ne pensate voi ragazzi? Qual è il tuo frammento di codice per stampare una mappa tranne println?

risposta

3

Il metodo mappingToString stato usato per cambiare il modo ogni coppia di chiave/valore è stato tradotto a stringa, che è stato poi utilizzato dal metodo toString.

Penso che sia una cosa sbagliata. Aggiunge una mutabilità a una struttura di dati altrimenti immutabile, per una cosa. Se hai esigenze di stampa specifiche, probabilmente stai meglio inserendole in un'altra classe.

+0

Buon punto di essere classe immutabili! – Ekkmanz

2

mappingToString era specifico per Map.

Con il nuovo framework di collezioni in Scala2.8, un Map può essere iterato da qualsiasi IterableLike, che si estende TraversableLike.

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

Vedi questo blog post "Strings" by 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 
3

Si potrebbe anche combinare Iterator.map() con mkString(), ad esempio, per creare una query-stringa da un map[String,String]:

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