2013-05-05 14 views
7

Mam Mapa gdzie każda wartość jest listą krotek takich jak:Extract drugi element krotki w liście krotek

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

co jest najbardziej scala-thonic sposób zmienić każdą wartość nadal jest lista ale jest tylko drugi element każdej krotki

List(1,4,3) 

próbowałem

myMap.mapValues(x => x._2) 

I dostać

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

Jakieś wskazówki?

Odpowiedz

7

Spróbuj tego:

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

Wartość przekazana do mapValues jest List[(Char,Integer)], więc trzeba dalej map, że do drugiego elementu krotki.

1

Należy zauważyć, że funkcja mapValues ​​() zwraca widok w myMap. Jeśli myMap jest zmienna i jest modyfikowana, odpowiednie zmiany pojawią się na mapie zwróconej przez parametry mapValues. Jeśli naprawdę nie chcesz swoją oryginalną mapę po transformacji, można użyć mapę() zamiast mapValues ​​():

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

Oby praca dla Ciebie?

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

Innym sposobem jest użycie unzip który zamienia listę krotek na krotki list. Jest to szczególnie przydatne, jeśli faktycznie chcesz obu wartości z krotek.

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) 
Powiązane problemy