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
等等。目前在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中,使用以下命令編譯和執行此程式。
D:\>scalac Demo.scala
D:\>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中,使用以下命令編譯和執行此程式。
D:\>scalac Demo.scala
D:\>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中,使用以下命令編譯和執行此程式。
D:\>scalac Demo.scala
D:\>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中,使用以下命令編譯和執行此程式。
D:\>scalac Demo.scala
D:\>scala Demo
Swapped tuple: (hello,Scala)