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()** 方法迭代元組的所有元素。

嘗試以下示例程式以迭代元組。

示例

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_collections.htm
廣告