如何检索(“1”,“2”,“3”)Scala对象的元素?

时间:2014-08-03 20:38:54

标签: scala tuples

我陷入了Scala中一个令人尴尬的简单问题(我是新手)。

如何从"2"中的这样一个结构中检索第二个(比如说)元素(Scala):

scala> val a = ("1", "2", "3")
a: (String, String, String) = (1,2,3)

3 个答案:

答案 0 :(得分:5)

处理元组时,您可以执行以下任一操作:

val res = a._2

val (_, res, _) = a // sets res to "2"

val res = a match { case (_, i, _) => i } // same as above, just longer

// if your tuple appears in a list you can do something like this:
lst.map{ case (_, i, _) => /* do stuff with i */ }

答案 1 :(得分:3)

处理元组时,请尝试使用以下表达式:a._2

答案 2 :(得分:1)

您可以使用getClass查看该班级的名称是scala.Tuple3

scala> a.getClass.getName
res0: java.lang.String = scala.Tuple3

很遗憾,Tuple3的文档隐藏在API中,但您可以通过此直接链接访问它。

http://www.scala-lang.org/api/current/#scala.Tuple3

  

3个元素的元组; scala.Product3的规范表示。

     

_1 - 此Tuple3

的元素1      

_2 - 此Tuple3

的元素2      

_3 - 此Tuple3

的元素3

或者,您可以在REPL中使用制表符完成功能来查看a的公开成员列表。

scala> a.
_1                _2                _3
asInstanceOf      canEqual          copy
isInstanceOf      productArity      productElement
productElements   productIterator   productPrefix
toString          zip               zipped            

因此,答案是:您可以直接访问_2字段。

scala> a._2
res1: java.lang.String = 2

虽然这通常不鼓励使用模式匹配。

scala> a match { case (x, y, z) => y }
res2: java.lang.String = 2