你想要建立一个集合,集合元素类型是多样的。es6
元组为你提供了一种方式来存储不一样类型的元素在一个容器内,这在许多状况下是很是有用的。
spa
新建一个元祖经过把须要的额元组包在一组小括号内。下面是一个二元祖:
scala
scala> val d = ("Debi", 95) d: (String, Int) = (Debi,95)
注意,它包含了两个不一样的类型。下面这个例子展现了三元祖:
code
scala> val t = (3, "three", new Person("Al")) t: (Int, String, Person) = (3,three,Person(Al))
你能够使用下标来访问元组元素:three
scala> t._1 res0: Int = 3 scala> t._2 res1: String = three scala> t._3 res2: Person = Person(Al)
我一般状况下经过模式匹配来把元祖元素复制给一个变量:get
scala> val (x, y, z) = (3, "three", new Person("Al")) x: Int = 3 y: String = three z: Person = Person(Al)
这种解决方案还有一个很是美妙的好处在于,若是你不须要某一个元素,那么你能够使用_这个通配符来代替这个元素:it
scala> val (x, y, _) = (3, "three", new Person("Al")) x: Int = 3 y: String = three scala> val (x, _, _) = (3, "three", new Person("Al")) x: Int = 3 scala> val (x, _, z) = (3, "three", new Person("Al")) x: Int = 3 z: Person = Person(Al)
二元祖是Tuple2 class的实例,三元祖是Tuple3 class的实例。下面是建立二元祖最简单的方式:io
scala> val a = ("AL", "Alabama") a: (String, String) = (AL,Alabama)
你还能够使用下面的方式建立元组:table
scala> val b = "AL" -> "Alabama" b: (String, String) = (AL,Alabama) scala> val c = ("AL" -> "Alabama") c: (String, String) = (AL,Alabama)
若是你查看他们的类型,你会发现他们都是Touple2:class
scala> a.getClass res6: Class[_ <: (String, String)] = class scala.Tuple2 scala> b.getClass res7: Class[_ <: (String, String)] = class scala.Tuple2 scala> c.getClass res8: Class[_ <: (String, String)] = class scala.Tuple2
这种语法结构还能用来建立Map:
scala> val map = Map("AL" -> "Alabama") map: scala.collection.immutable.Map[String,String] = Map(AL -> Alabama)
元组是一个很是有趣的结构。但元素元组是不存在的;API中定义了tuple类是从Touple2到Touple22,一位置你能够拥有一个2元到22元的元组。
元组的一个通用状况是方法返回多个结果。这时候使用一个元组做为返回值而不是集合。虽然tuple不是一个集合,可是你能够把一个元组做为一个集合使用。
scala> val x = ("AL" -> "Alabama") x: (String, String) = (AL,Alabama) scala> val it = x.productIterator it: Iterator[Any] = non-empty iterator scala> for (e <- it) println(e) AL Alabama
使用iterator遍历元组,在使用完一次之后,就不能再用了。若是你须要再次遍历这个元组,那么你须要构造一个新的iterator来使用。
你也能够转换一个元组成为一个集合:
scala> val t = ("AL", "Alabama") t: (String, String) = (AL,Alabama) scala> t.productIterator.toVector res13: Vector[Any] = Vector(AL, Alabama)