Scala元组

来源:互联网 发布:win10改mac地址 编辑:程序博客网 时间:2024/05/29 19:25

来源:

http://www.yiibai.com/scala/scala_tuples.html

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.scalaC:/>scala TestSum of elements: 10C:/>

遍历元组:

可以使用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.scalaC:/>scala TestValue = 4Value = 3Value = 2Value = 1C:/>

转换为字符串:

可以使用Tuple.toString()方法来连接的元组的所有元素为一个字符串。以下为例子来说明的用法:

object Test {   def main(args: Array[String]) {      val t = new Tuple3(1, "hello", Console)            println("Concatenated String: " + t.toString() )   }}

让我们编译和运行上面的程序,这将产生以下结果:

C:/>scalac Test.scalaC:/>scala TestConcatenated 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.scalaC:/>scala TestSwapped tuple: (hello,Scala)C:/>