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