2014-11-21 15 views
5

Ciao ragazzi ho lista di coppie di tuple, List[(String,String)] e vuole appiattire ad una lista di stringhe, List[String]Scala lista di tuple alla lista piatta

Qualsiasi aiuto apprezzato.

+4

Come si va da due stringhe in una singola stringa? Non abbiamo idea di come tu voglia combinarli. –

+4

non molto scala quelle parentesi angolari ... – soulcheck

+1

bene hai una tupla di 2 stringhe cioè <"John," Paul "> e dopo qualche appiattimento .... una lista ...." John "," Paul " –

risposta

9

Alcune delle opzioni potrebbero essere: concatenate:

list.map(t => t._1 + t._2) 

una dopo l'altra Interleaved (dopo il tuo commento mi sembra che stavi chiedendo per questo):

list.flatMap(t => List(t._1, t._2)) 

diviso e li aggiunge :

list.map(_._1) ++ list.map(_._2) 
+0

grazie Lo proverò –

+0

Ricorda che la terza opzione è abbastanza inefficiente: attraversa la stessa lista due volte, poi aggiunge una elencare ad un altro, che ha una complessità lineare. – stefanobaghino

6

Bene, è sempre possibile utilizzare flatMap come in:

list flatMap (x => List(x._1, x._2)) 

Anche se la tua domanda è un po 'vaga.

3

Prova:

val tt = List(("John","Paul"),("George","Ringo")) 
tt.flatMap{ case (a,b) => List(a,b) } 

Questo si traduce in:

List (John, Paul, George, Ringo)

0

In generale per le liste di tuple di qualsiasi arity, si consideri questo,

myTuplesList.map(_.productIterator.map(_.toString)).flatten 

Nota il productIterator esegue il cast di tutti i tipi in una tupla su Any, quindi riportiamo i valori qui a String.