「这是我参与2022首次更文挑战的第7天,活动详情查看:2022首次更文挑战」
元组
与列表一样,元组也是不可变的,但与列表不同的是元组可以包含不同类型的元素。
元组的值是通过将单个的值包含在圆括号中构成的。例如:
val t = (1, "a", 3.14)
以上实例在元组中定义了三个元素,对应的类型分别为[Int, Double, java.lang.String]。
此外我们也可以使用以下方式来定义:
val t = new Tuple3(1, 3.14, "Fred")
和数组或字符串中的位置不同,元组从1开始而不是0。
在创建两个元素的元组时,可以使用特殊语法: ->:
def main(args: Array[String]): Unit = {
val tuple = 1 -> "jacqueshuang"
println(tuple)
println(tuple.getClass)
}
______________________________________
输出:
(1,jacqueshuang)
class scala.Tuple2
你在使用两个元素的元组可以使用 Tuple.swap 方法来交换元组的元素。如下实例:
def main(args: Array[String]): Unit = {
val tuple = Tuple2("www.google.com", "www.runoob.com")
println(tuple.swap)
}
_________________________________________________________
输出:
(www.runoob.com,www.google.com)
定义一个3元组
val t = (1, "a", 3.14)
也可以使用下面这种方式定义
val tuple= Tuple3(111,"22",'c')
如果并不是所有的部件都需要,则可以在不需要的位置使用 _ 。 如下:
val (first , _, third ) = t
案例:
def main(args: Array[String]): Unit = {
println("定义一个3元组")
val t = (1, "a", 3.14)
println( s"t:$t")
println("也可以使用下面的方式定义元组")
val tuple= Tuple3(111,"22",'c')
println( s"t:$tuple")
println("如果并不是所有的部件都需要,则可以在不需要的位置使用 _ 。")
val (first , _, third ) = t
println(first)
println(third)
}
————————————————————————————————————————————————
输出:
定义一个3元组
t:(1,a,3.14)
也可以使用
t:(111,22,c)
如果并不是所有的部件都需要,则可以在不需要的位置使用 _ 。
1
3.14
组的实际类型取决于它的元素的类型,比如 (99, "runoob") 是 Tuple2[Int, String]。 ('u', 'r', "the", 1, 4, "me") 为 Tuple6[Char, Char, String, Int, Int, String]。
目前 Scala 支持的元组最大长度为 22。对于更大长度你可以使用集合,或者扩展元组。
访问元组的元素可以通过数字索引,如下一个元组:
def main(args: Array[String]): Unit = {
val t = (4,3,2,1)
println(s"_1的值:${t._1}")
println(s"_2的值:${t._2}")
println(s"_3的值:${t._3}")
println(s"_4的值:${t._4}")
}
——————————————————————————————————————————
輸出:
_1的值:4
_2的值:3
_3的值:2
_4的值:1
也可以进行数字运算
def main(args: Array[String]): Unit = {
val t = (4,3,2,1)
println(s"相加->${t._1+t._2+t._3+t._4}")
}
你可以使用**Tuple.productIterator()**方法来迭代输出元组的所有元素:
def main(args: Array[String]): Unit = {
val t = (4,3,2,1)
val iterator = t.productIterator.iterator
while (iterator.hasNext){
println(s"next获取的value=${iterator.next()}")
}
t.productIterator.foreach{ i =>println(s"foreach获取的value = $i " )}
}
——————————————————————————————————————————————————————————————————
输出:
next获取的value=4
next获取的value=3
next获取的value=2
next获取的value=1
foreach获取的value = 4
foreach获取的value = 3
foreach获取的value = 2
foreach获取的value = 1