Scala:使用map从列表中提取二级元组值

Scala:使用map从列表中提取二级元组值,scala,tuples,mapping,Scala,Tuples,Mapping,我的问题如下: 我有一个特定类型的列表,我们称之为a。 A由A(名称:String,值:Int)定义 这将使我的列表看起来像[(“a”,10)(“b”,12)(“c”14)] 现在我想使用一个map函数来只提取次值。也就是说,构建一个新的值列表[10,12,14]。我已经试了一个多小时了,但似乎没能成功 我在map函数中尝试了模式匹配,并尝试使用第二个元素,即: myList.map(_.value) 或 但似乎无法让它工作 如果您的列表是一个Tuple2as val list = List

我的问题如下:

我有一个特定类型的列表,我们称之为
a
A
A(名称:String,值:Int)
定义

这将使我的列表看起来像
[(“a”,10)(“b”,12)(“c”14)]

现在我想使用一个map函数来只提取次值。也就是说,构建一个新的值列表
[10,12,14]
。我已经试了一个多小时了,但似乎没能成功

我在map函数中尝试了模式匹配,并尝试使用第二个元素,即:

myList.map(_.value) 


但似乎无法让它工作

如果您的列表是一个
Tuple2
as

val list = List(("a", 10), ("b", 12), ("c", 14))
//list: List[(String, Int)] = List((a,10), (b,12), (c,14))
必须使用方法
\u 1
访问第一个元素,
\u 2
访问第二个元素,依此类推。因此,采取以下措施应该可以解决问题

list.map(_._2)
//res0: List[Int] = List(10, 12, 14)
但如果将其定义为
案例类
as

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)

如果您的列表是一个
Tuple2
as

val list = List(("a", 10), ("b", 12), ("c", 14))
//list: List[(String, Int)] = List((a,10), (b,12), (c,14))
必须使用方法
\u 1
访问第一个元素,
\u 2
访问第二个元素,依此类推。因此,采取以下措施应该可以解决问题

list.map(_._2)
//res0: List[Int] = List(10, 12, 14)
但如果将其定义为
案例类
as

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)

如果您的数据结构是
案例类
,那么您所做的是正确的

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.\u 2
或下面的模式匹配来获取第二个元素

scala> Seq(("a", 1), ("b", 2), ("c", 3)).collect {case (name, value) => value } 
res7: Seq[Int] = List(1, 2, 3)

也请阅读

如果您的数据结构是
案例类
,则您所做的是正确的

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.\u 2
或下面的模式匹配来获取第二个元素

scala> Seq(("a", 1), ("b", 2), ("c", 3)).collect {case (name, value) => value } 
res7: Seq[Int] = List(1, 2, 3)

如果这些确实是元组(而不是像
a
这样的case类的实例),请阅读
myList.map(u._2)
@TzachZohar如果您的数据结构是
Tuple
,那么它是正确的,但是在这里显示一个数据类
a(名称:String,值:Int)会让工程师感到困惑
。你说问题已经解决了,但两个答案都没有被接受,甚至没有被投票支持。这不是说谢谢的方式。是的,同意@jwvh。如果两个答案中没有一个解决了你的问题,那么给自己一个答案(或者你需要更高的声誉来这样做吗?)。但如果有一个答案解决了你的问题,就接受它作为答案,并投票选出你认为好的每个答案。它比编辑问题花费更少,并且系统不会将您的编辑识别为“已解决”。但它将识别“已接受答案”(问题列表中的彩色答案计数器)。顺便说一句:我们在这里避免打招呼,“提前谢谢”、“请帮帮我”等等。“已解决”的消息污染了自动生成的摘录-另一个反对的观点。如果这些确实是元组(而不是像
a
这样的case类的实例),那么使用
myList.map(u._2)
@TzachZohar是正确的,如果您的数据结构是
元组
,但是您在这里显示一个数据类
a,让工程师感到困惑(name:String,value:Int)
。你说问题解决了,但两个答案都没有被接受,甚至没有被投票。这不是表示感谢的方式。是的,同意@jwvh。如果两个答案中没有一个解决了你的问题,请给出一个自我回答(或者你需要更多的声誉才能这样做?)。但是,如果一个答案解决了您的问题,请接受它作为答案,并对每个答案进行投票,您认为这是好的。它比编辑问题花费更少,系统不会将您的编辑识别为“已解决”。但它将识别“已接受的答案”(问题列表中的彩色答案计数器)顺便说一句:我们在这里避免打招呼,“提前谢谢”、“请帮帮我”之类的。而“已解决”的信息污染了自动生成的摘录-另一个反对的观点。