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

12

我有一个地图(Map),其中每个值都是一组元组(Tuples)的列表,例如:

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

什么是最具Scala特色的方法,可以将每个值仍保留在列表中,但仅为每个元组的第二个元素进行更改?

List(1,4,3)

我已经尝试过

myMap.mapValues(x => x._2)

我明白了

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

有什么小建议吗?

4个回答

10

试试这个:

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

mapValues方法接收的参数是List[(Char,Integer)],所以你需要将其进一步映射到元组的第二个元素。


8
那对你来说可以吗?
val a = List(('a',1), ('b', 4), ('c', 3))
a.map(_._2)

2
请注意,mapValues()返回的是myMap上的视图。如果myMap是可变的并且被修改了,相应的更改将出现在mapValues返回的地图中。如果您真的不希望在转换后保留原始映射,请改用map()而不是mapValues()。
myMap.map(pair => (pair._1, pair._2.map(_._2)))

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)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接