我的问题如下:
我有一个特定类型的列表,我们称之为A
。
A
由A(name:String, value: Int)
定义。
这会使我的列表看起来像[("a", 10) ("b", 12) ("c" 14)]
。
现在我想使用map函数只提取辅助值。这是构建值[10,12,14]
的新列表。我已经尝试了一个多小时,但似乎无法让它工作。
我在map函数中尝试使用模式匹配并尝试使用第二个元素,即:
myList.map(_.value)
或
myList.map(_.2)
但似乎无法让它发挥作用。
答案 0 :(得分:2)
如果您的列表是Tuple2
val list = List(("a", 10), ("b", 12), ("c", 14))
//list: List[(String, Int)] = List((a,10), (b,12), (c,14))
您必须使用方法_1
来访问第一个元素,_2
来访问第二个元素,依此类推。所以做以下事情应该解决
list.map(_._2)
//res0: List[Int] = List(10, 12, 14)
但如果将其定义为case class
为
case class A(name:String, value: Int)
//defined class A
val list = List(A("a", 10), A("b", 12), A("c", 14))
//list: List[A] = List(A(a,10), A(b,12), A(c,14))
然后你的方式是正确的
list.map(_.value)
//res0: List[Int] = List(10, 12, 14)
答案 1 :(得分:2)
如果您的数据结构为case class
,那么您正在做的是正确的,
scala> case class Data(name:String, value: Int)
// defined case class Data
scala> Seq(Data("a", 1), Data("b", 2), Data("c", 3)).map(_.value)
val res6: Seq[Int] = List(1, 2, 3)
但是如果它不是数据类而是元组,那么你必须使用tuple._2
或模式匹配得到第二个元素,如下所示
scala> Seq(("a", 1), ("b", 2), ("c", 3)).collect {case (name, value) => value }
res7: Seq[Int] = List(1, 2, 3)