我有一个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)]
任何提示?
答案 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)