Scala:使用map从列表中提取辅助元组值

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Scala:使用map从列表中提取辅助元组值相关的知识,希望对你有一定的参考价值。

我的问题如下:

我有一个特定类型的列表,我们称之为AAA(name:String, value: Int)定义。

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

现在我想使用map函数只提取辅助值。这是构造值[10,12,14]的新列表。我已经尝试了一个多小时,但似乎无法让它工作。

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

myList.map(_.value) 

要么

myList.map(_.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)

另请阅读syntax for scala tuple

另一答案

如果你的名单是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)

以上是关于Scala:使用map从列表中提取辅助元组值的主要内容,如果未能解决你的问题,请参考以下文章

Spack [Scala]:按键减少嵌套元组值

Scala 3:如何从 Mirror.Sum 中提取元素的名称作为元组?

Scala从入门到精通之四-映射和元组

pyspark reduce键是一个元组值嵌套列表

scala 基础六 scala Map和元组的操作

Scala之元组Set和map集合