Scala - 元组

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

试试下面的示例程序。 它展示了如何使用元组。

示例

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() 方法将元组的所有元素连接成一个字符串。 尝试以下示例程序以转换为字符串。

示例

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)

❮ Scala 集合