你想要建立一個集合,集合元素類型是多樣的。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)