位置:首頁 > 高級語言 > Scala教學 > Scala元組

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:/>