我有一个 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)]
有小费吗?
试试这个:
myMap.mapValues(_.map(_._2))
传递给的值mapValues
是 a List[(Char,Integer)]
,因此您必须进一步将其映射到元组的第二个元素。
这对你有用吗?
val a = List(('a',1), ('b', 4), ('c', 3))
a.map(_._2)
请注意,mapValues() 返回 myMap 上的视图。如果 myMap 是可变的并且被修改了,那么相应的变化就会出现在 mapValues 返回的地图中。如果您真的不想要转换后的原始地图,您可能需要使用 map() 而不是 mapValues():
myMap.map(pair => (pair._1, pair._2.map(_._2)))
另一种方法是使用unzip
which 将元组列表转换为列表元组。如果您确实需要元组中的两个值,则它特别有用。
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)