在元组列表中提取第二个元组元素

时间:2013-05-05 22:24:27

标签: scala map tuples

我有一个Map,其中每个值都是一个元组列表,例如:

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

改变每个值的scala-thonic方法最多仍然是LIst,但只是每个元组的第二个元素

List(1,4,3)

我试过了

myMap.mapValues(x => x._2)

我得到了

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

任何提示?

4 个答案:

答案 0 :(得分:9)

试试这个:

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

传递给mapValues的值是List[(Char,Integer)],因此您必须进一步将其映射到元组的第二个元素。

答案 1 :(得分:5)

这会对你有用吗?

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

答案 2 :(得分:2)

请注意,mapValues()会在myMap上返回一个视图。如果myMap是可变的并且已被修改,则相应的更改将显示在mapValues返回的映射中。如果您在转换后确实不想要原始地图,则可能需要使用map()而不是mapValues():

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

答案 3 :(得分:0)

另一种方法是使用unzip将元组列表转换为列表元组。如果你真的想要来自元组的两个值,它会特别有用。

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)