📜  Scala集合-元组

📅  最后修改于: 2020-11-02 04:32:38             🧑  作者: Mango


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]中返回的计数,总和和平方和。在并发编程中,在actor之间传递数据值列表作为消息时,它们也很有用。

请尝试以下示例程序。它显示了如何使用元组。

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中。以下命令用于编译和执行该程序。

指令

\>scalac Demo.scala
\>scala Demo

输出

Sum of elements: 10

遍历元组

您可以使用Tuple.productIterator()方法来遍历Tuple的所有元素。

尝试使用以下示例程序遍历元组。

object Demo {
   def main(args: Array[String]) {
      val t = (4,3,2,1)
      t.productIterator.foreach{ i =>println("Value = " + i )}
   }
}

将以上程序保存在Demo.scala中。以下命令用于编译和执行该程序。

指令

\>scalac Demo.scala
\>scala Demo

输出

Value = 4
Value = 3
Value = 2
Value = 1

转换为字符串

您可以使用Tuple.toString()方法将元组的所有元素连接成一个字符串。请尝试以下示例程序将其转换为String。

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

将以上程序保存在Demo.scala中。以下命令用于编译和执行该程序。

命令

\>scalac Demo.scala
\>scala Demo

输出

Concatenated String: (1,hello,scala.Console$@281acd47)

交换元素

您可以使用Tuple.swap方法交换Tuple2的元素。

尝试使用以下示例程序交换元素。

object Demo {
   def main(args: Array[String]) {
      val t = new Tuple2("Scala", "hello")
      println("Swapped Tuple: " + t.swap )
   }
}

将以上程序保存在Demo.scala中。以下命令用于编译和执行该程序。

命令

\>scalac Demo.scala
\>scala Demo

输出

Swapped tuple: (hello,Scala)