2013-05-05 22 views
7

ho avere una mappa in cui ogni valore è una lista di tuple come ad esempio:estratto secondo elemento tuple nella lista di tuple

List(('a',1), ('b', 4), ('c', 3)....) 

qual è il modo più scala-thonic cambiare ogni valore è ancora una lista ma è solo il secondo elemento di ogni tupla

List(1,4,3) 

ho provato

myMap.mapValues(x => x._2) 

E ottengo

error: value _2 is not a member of List[(Char, Integer)] 

qualche consiglio?

risposta

7

Prova questo:

myMap.mapValues(_.map(_._2)) 

Il valore passato ad mapValues è un List[(Char,Integer)], in modo da avere a mappare, inoltre, che per il secondo elemento della tupla.

1

Si noti che mapValues ​​() restituisce una vista su myMap. Se myMap è modificabile e viene modificato, le modifiche corrispondenti appariranno nella mappa restituita da mapValues. Se davvero non si vuole la vostra mappa originale dopo la trasformazione, si consiglia di utilizzare carta() al posto di mapValues ​​():

myMap.map(pair => (pair._1, pair._2.map(_._2))) 
4

Sarebbe il lavoro per voi?

val a = List(('a',1), ('b', 4), ('c', 3)) 
a.map(_._2) 
0

Un altro modo è usare unzip che trasforma una lista di tuple in una tupla di liste. È particolarmente utile se in realtà vuoi entrambi i valori delle tuple.

val list = List(('a',1), ('b', 4), ('c', 3)) 

val (letters, numbers) = list.unzip 
// letters: List[Char] = List(a, b, c) 
// numbers: List[Int] = List(1, 4, 3)