Scala 元组(Tuple)

2020-07-27 10:40:50 | 编辑 | 添加

元素数组即元组,Scala 允许我们通过(A,B,C) 表达式声明Tuple3[A,B,C] 对象,而这一类型也称为元组类型(tuple type):

val t1: Tuple3[String, Int, Double] = ("one", 2, 3.14)
val t2: (String, Int, Double) = ("one", 2, 3.14)

 

Tuple的元素个数不能大于22个,否则编译出错,元组是一个不可变的对象序列,创建时使用逗号分隔。例如,("Venkat", "Subramaniam","venkats@agiledeveloper.com")表示一个3 个对象的元组。对于包含了复杂类型的元组而言,使用这种简化的写法会减少嵌套括号的数量,因此会更便利一些。除此之外,简化的写法中省略了TupleN 字符,因而比之前的写法要简短一些。

 

1.方法返回多个结果

在Java 中,方法可以接受多个参数,但是只能返回一个结果。如果要返回多个结果只能使用集合,而Scala 就可以通过元组来实现返回多个结果

 

def getPersonInfo(primaryKey: Int) = {
// 假定primaryKey 是用来获取用户信息的主键
// 这里响应体是固定的
("Venkat", "Subramaniam", "venkats@agiledeveloper.com")
}
val (firstName, lastName, emailAddress) = getPersonInfo(1)
println(s"First Name: $firstName")
println(s"Last Name: $lastName")
println(s"Email Address: $emailAddress")

 

输出:

First Name: Venkat
Last Name: Subramaniam
Email Address: venkats@agiledeveloper.com

 

2.Scala 元组的调用

除了上面元组赋值后使用美元符号$调用元组元素,还可以直接访问元组中的单个元素。例如,如果运行val info =getPersonInfo(1),那么随后就可以采用info._1 这种语法形式访问其中的第一个元素,第二个元素则是info._2,以此类推。

 

下划线加数字这种模式,如_1,表示我们在元组中想访问的元素的索引或位置。与集合不同,访问元组的索引是从1 开始的。另一个和集合的差异点在于,如果指定的索引越界,则会在编译期而不是在运行时出错。

 

3.Scala 元组遍历迭代

使用 Tuple.productIterator() 方法来迭代输出元组的所有元素:

info.productIterator.foreach{ item =>println("Value = " + item)}