11

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

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

改变每个值的最简单的方法是什么仍然是一个列表,但只是每个元组的第二个元素

List(1,4,3)

我试过了

myMap.mapValues(x => x._2)

我得到

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

有小费吗?

4

4 回答 4

9

试试这个:

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

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

于 2013-05-05T22:34:20.037 回答
7

这对你有用吗?

val a = List(('a',1), ('b', 4), ('c', 3))
a.map(_._2)
于 2013-05-06T04:12:31.707 回答
2

请注意,mapValues() 返回 myMap 上的视图。如果 myMap 是可变的并且被修改了,那么相应的变化就会出现在 mapValues 返回的地图中。如果您真的不想要转换后的原始地图,您可能需要使用 map() 而不是 mapValues():

myMap.map(pair => (pair._1, pair._2.map(_._2)))
于 2013-05-05T22:57:07.137 回答
0

另一种方法是使用unzipwhich 将元组列表转换为列表元组。如果您确实需要元组中的两个值,则它特别有用。

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)
于 2017-04-21T10:50:03.420 回答