Scala元组
Scala的元组结合件多个固定数量在一起,使它们可以被传来传去作为一个整体。不像一个数组或列表,元组可以容纳不同类型的对象,但它们也是不可改变的。这里是一个元组持有整数,字符串和Console,如下的一个例子:
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等。至少目前为22的上限在Scala,如果需要更多,那么可以使用一个集合,而不是一个元组。对于每个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
可以使用三元组来写一个方法,它接受一个List[Double],并返回计数的总和,并在三个元素的元组返回平方和,Tuple3[Int, Double, Double]。它们也非常有用传递的数据值的列表并发编程之间的消息。下面是一个元组的例子显示使用:
object Test { 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 ) } }
让我们编译和运行上面的程序,这将产生以下结果:
C:/>scalac Test.scala C:/>scala Test Sum of elements: 10 C:/>
遍历元组:
可以使用Tuple.productIterator()方法来遍历一个元组的所有元素。下面是一个例子来连接两个图:
object Test { def main(args: Array[String]) { val t = (4,3,2,1) t.productIterator.foreach{ i =>println("Value = " + i )} } }
让我们编译和运行上面的程序,这将产生以下结果:
C:/>scalac Test.scala C:/>scala Test Value = 4 Value = 3 Value = 2 Value = 1 C:/>
转换为字符串:
可以使用Tuple.toString()方法来连接的元组的所有元素为一个字符串。以下为例子来说明的用法:
object Test { def main(args: Array[String]) { val t = new Tuple3(1, "hello", Console) println("Concatenated String: " + t.toString() ) } }
让我们编译和运行上面的程序,这将产生以下结果:
C:/>scalac Test.scala C:/>scala Test Concatenated String: (1,hello,scala.Console$@281acd47) C:/>
交换元素:
可以使用Tuple.swap方法来交换一个Tuple2的元素。以下为例子来说明的用法:
object Test { def main(args: Array[String]) { val t = new Tuple2("Scala", "hello") println("Swapped Tuple: " + t.swap ) } }
让我们编译和运行上面的程序,这将产生以下结果:
C:/>scalac Test.scala C:/>scala Test Swapped tuple: (hello,Scala) C:/>