Scala Tuples
Scala元组将固定数量的项目组合在一起,以便它们可以作为一个整体传递。 与数组或列表不同,元组可以保存具有不同类型的对象,但它们也是不可变的。
以下是包含整数,字符串和控制台的元组的示例。
val t = (1, "hello", Console)
这是以下的语法糖(捷径) -
val t = new Tuple3(1, "hello", Console)
元组的实际类型取决于它包含的元素和元素以及这些元素的类型。 因此,(99,“Luftballons”)的类型是Tuple2 [Int,String]。 ('u','r',“the”,1,4,“me”)的类型是Tuple6 [Char,Char,String,Int,Int,String]
元组是Tuple1,Tuple2,Tuple3等类型。 如果你需要更多,Scala目前的上限为22,那么你可以使用集合,而不是元组。 对于每个TupleN类型,其中1 <= N <= 22,Scala定义了许多元素访问方法。 鉴于以下定义 -
val t = (4,3,2,1)
要访问元组t的元素,可以使用方法t._1访问第一个元素,使用t._2访问第二个元素,依此类推。 例如,以下表达式计算t的所有元素的总和。
val sum = t._1 + t._2 + t._3 + t._4
您可以使用Tuple编写一个采用List [Double]的方法,并返回三元组元组,Tuple3 [Int,Double,Double]中返回的计数,总和和平方和。 它们对于在并发编程中将参与者之间的数据值列表作为消息传递也很有用。
请尝试以下示例程序。 它显示了如何使用元组。
例子 (Example)
object Demo {
def main(args: Array[String]) {
val t = (4,3,2,1)
val sum = t._1 + t._2 + t._3 + t._4
println( "Sum of elements: " + sum )
}
}
将上述程序保存在Demo.scala 。 以下命令用于编译和执行此程序。
Commands
\>scalac Demo.scala
\>scala Demo
输出 (Output)
Sum of elements: 10
迭代元组
您可以使用Tuple.productIterator()方法迭代元组的所有元素。
尝试以下示例程序来迭代元组。
例子 (Example)
object Demo {
def main(args: Array[String]) {
val t = (4,3,2,1)
t.productIterator.foreach{ i =>println("Value = " + i )}
}
}
将上述程序保存在Demo.scala 。 以下命令用于编译和执行此程序。
Commands
\>scalac Demo.scala
\>scala Demo
输出 (Output)
Value = 4
Value = 3
Value = 2
Value = 1
转换为字符串
您可以使用Tuple.toString()方法将元组的所有元素连接成一个字符串。 尝试以下示例程序转换为String。
例子 (Example)
object Demo {
def main(args: Array[String]) {
val t = new Tuple3(1, "hello", Console)
println("Concatenated String: " + t.toString() )
}
}
将上述程序保存在Demo.scala 。 以下命令用于编译和执行此程序。
Command
\>scalac Demo.scala
\>scala Demo
输出 (Output)
Concatenated String: (1,hello,scala.Console$@281acd47)
交换元素
您可以使用Tuple.swap方法交换Tuple.swap的元素。
尝试以下示例程序来交换元素。
例子 (Example)
object Demo {
def main(args: Array[String]) {
val t = new Tuple2("Scala", "hello")
println("Swapped Tuple: " + t.swap )
}
}
将上述程序保存在Demo.scala 。 以下命令用于编译和执行此程序。
Command
\>scalac Demo.scala
\>scala Demo
输出 (Output)
Swapped tuple: (hello,Scala)