scala中的tuple元組

2021-08-04 16:55:38 字數 3148 閱讀 7042

problem

你想要建立乙個集合,集合元素型別是多樣的。

solution

元組為你提供了一種方式來儲存不同型別的元素在乙個容器內,這在許多情況下是非常有用的。

新建乙個元祖通過把需要的額元組包在一組小括號內。下面是乙個二元祖:

scala> val

d = ("debi"

, 95

)d: (string, int

) = (debi,95

)

注意,它包含了兩個不同的型別。下面這個例子展示了三元祖:

scala> val t = (3

, "three"

, new

person("al"

))t: (int, string

, person) = (3

,three,person(al))

你可以使用下標來訪問元組元素:

scala> t._1

res0:

int = 3

scala> t._2

res1:

string = three

scala> t._3

res2:

person = person(al)

我通常情況下通過模式匹配來把元祖元素複製給乙個變數:

scala> val (x, y, z) = (3

, "three"

, new

person("al"

))x:

int = 3

y: string = three

z: person = person(al)

這種解決方案還有乙個非常美妙的好處在於,如果你不需要某乙個元素,那麼你可以使用_這個萬用字元來代替這個元素:

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的例項。下面是建立二元祖最簡單的方式:

scala> val a = ("al"

, "alabama"

)a: (string

, string

) = (al,alabama)

你還可以使用下面的方式建立元組:

scala> val b = "al"

-> "alabama"

b: (string

, string

) = (al,alabama)

scala> val c = ("al"

-> "alabama"

)c: (string

, string

) = (al,alabama)

如果你檢視他們的型別,你會發現他們都是touple2:

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)

discussion

元組是乙個非常有趣的結構。但元素元組是不存在的;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)

alalabama

使用iterator遍歷元組,在使用完一次以後,就不能再用了。如果你需要再次遍歷這個元組,那麼你需要構造乙個新的iterator來使用。

你也可以轉換乙個元組成為乙個集合:

scala> val t = ("al"

, "alabama"

)t: (string

, string

) = (al,alabama)

scala> t.productiterator.tovector

res13: vector[any] = vector(al, alabama)

scala中Tuple元組大全

美圖欣賞 一.背景 元組在操作spark中還是非常多的 二.元組 tuple 對映是k v對偶的集合,對偶是元組的最簡單形式,元組可以裝著多個不同型別的值,是不同型別的值的聚集。三.舉例1.第一種方法 建立乙個tuple元組 scala val tuple 1 jackson 2.5 100l 20...

Scala學習筆記之元組 Tuple

元組是scala提供的一種特殊的資料結構,或者說是一塊語法糖,它允許多個不同型別的元素組合在一起被使用,如下所示 val tup 1,3.14,元組 true 這是乙個四元組,由4個元素組成。scala目前的版本支援最多22元組。一元組類是存在的,但沒有對應的內建語法,所以單純的用括號把乙個值圍起來...

scala 元組tuple的幾個知識點

通過下標 n取資料不多說了,下面是幾個比較有意思的知識點 知識點1 tuple 和function 和producct一樣最多隻支援22個元素 比如 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21 這樣是沒問題的 但是 0,1,2,3,...