2013-05-05 24 views
7

Tôi có một bản đồ nơi mỗi giá trị là danh sách các Tuples như:Extract yếu tố tuple thứ hai trong danh sách các hàng

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

gì là cách mà hầu hết scala-thonic để thay đổi mỗi giá trị vẫn là một danh sách nhưng chỉ là yếu tố thứ hai của mỗi tuple

List(1,4,3) 

tôi đã thử

myMap.mapValues(x => x._2) 

Và tôi nhận

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

bất kỳ mẹo nào?

Trả lời

7

Hãy thử điều này:

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

Giá trị truyền cho mapValues là một List[(Char,Integer)], vì vậy bạn phải thêm bản đồ đó đến yếu tố thứ hai của tuple.

1

Lưu ý rằng mapValues ​​() trả về chế độ xem trên myMap. Nếu myMap có thể thay đổi và được sửa đổi, các thay đổi tương ứng sẽ xuất hiện trong bản đồ được trả về bởi mapValues. Nếu bạn thực sự không muốn bản đồ gốc của mình sau khi chuyển đổi, bạn có thể muốn sử dụng map() thay vì mapValues ​​():

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

Điều đó có phù hợp với bạn không?

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

Một cách khác là sử dụng unzip mà biến một danh sách các hàng vào một tuple của danh sách. Nó đặc biệt hữu ích nếu bạn thực sự muốn cả hai giá trị từ các bộ dữ liệu.

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)