简介
与列表一样,元组也是不可变的,但与列表不同的是元组可以包含不同类型的元素。
元组的值是通过将单个的值包含在圆括号中构成的。例如:
元组定义
val t = (1, 3.14, "Fred")
t: (Int, Double, String) = (1, 3.14, "Fred")
以上实例在元组中定义了三个元素,对应的类型分别为[Int, Double, java.lang.String]。
此外我们也可以使用以上方式来定义:
val t = new Tuple3(1, 3.14, "Fred")
t: (Int, Double, String) = (1, 3.14, "Fred")
组的实际类型取决于它的元素的类型,比如 (99, “runoob”) 是 Tuple2[Int, String]。 (‘u’, ‘r’, “the”, 1, 4, “me”) 为 Tuple6[Char, Char, String, Int, Int, String]。
目前 Scala 支持的元组最大长度为 22。对于更大长度你可以使用集合,或者扩展元组。
访问元组的元素可以通过数字索引,如下一个元组:
val t = Tuple22(1,2,3,4,5,6,7,8,9,10,11,12,1,2,3,4,5,6,7,8,9,10)
t: (Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int) = (1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
val t = Tuple23(1,2,3,4,5,6,7,8,9,10,11,12,1,2,3,4,5,6,7,8,9,10,11)
Main.scala:24: not found: value Tuple23
Tuple23(1,2,3,4,5,6,7,8,9,10,11,12,1,2,3,4,5,6,7,8,9,10,11)
^
元组访问
t._1
res3: Int = 4
我们可以使用 t._1 访问第一个元素, t._2 访问第二个元素
迭代元组
你可以使用 Tuple.productIterator() 方法来迭代输出元组的所有元素:
val t = (4,3,2,1)
t.productIterator.foreach{ i =>println("Value = " + i )}
Value = 4
Value = 3
Value = 2
Value = 1
元组转为字符串
你可以使用 Tuple.toString() 方法将元组的所有元素组合成一个字符串,实例如下:
val t = new Tuple3(1, "hello", Console)
println("连接后的字符串为: " + t.toString() )
连接后的字符串为: (1,hello,scala.Console$@5d232f8c)
t: (Int, String, Console.type) = (1, "hello", scala.Console$@5d232f8c)
元素交换
你可以使用 Tuple.swap 方法来交换元组的元素顺序。如下实例:
val t = new Tuple2("111", "222")
println("交换后的元组: " + t.swap )
交换后的元组: (222,111)
t: (String, String) = ("111", "222")