scala中的tuple元组

来源:互联网 发布:c4d mac 卸载 编辑:程序博客网 时间:2024/05/15 12:12

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._1res0: Int = 3scala> t._2res1: String = threescala> t._3res2: Person = Person(Al)

    我通常情况下通过模式匹配来把元祖元素复制给一个变量:

scala> val (x, y, z) = (3"three"new Person("Al"))x: Int = 3y: String = threez: Person = Person(Al)

    这种解决方案还有一个非常美妙的好处在于,如果你不需要某一个元素,那么你可以使用_这个通配符来代替这个元素:

scala> val (x, y, _) = (3"three"new Person("Al"))x: Int = 3y: String = threescala> val (x, _, _) = (3"three"new Person("Al"))x: Int = 3scala> val (x, _, z) = (3"three"new Person("Al"))x: Int = 3z: Person = Person(Al)

    二元祖是Tuple2 class的实例,三元祖是Tuple3 class的实例。下面是创建二元祖最简单的方式:

scala> val a = ("AL""Alabama")a: (StringString) = (AL,Alabama)

    你还可以使用下面的方式创建元组:

scala> val b = "AL" -> "Alabama"b: (StringString) = (AL,Alabama)scala> val c = ("AL" -> "Alabama")c: (StringString) = (AL,Alabama)

    如果你查看他们的类型,你会发现他们都是Touple2:

scala> a.getClassres6: Class[_ <: (StringString)] = class scala.Tuple2scala> b.getClassres7: Class[_ <: (StringString)] = class scala.Tuple2scala> c.getClassres8: Class[_ <: (StringString)] = 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: (StringString) = (AL,Alabama)scala> val it = x.productIteratorit: Iterator[Any] = non-empty iteratorscala> for (e <- it) println(e)ALAlabama

    使用iterator遍历元组,在使用完一次以后,就不能再用了。如果你需要再次遍历这个元组,那么你需要构造一个新的iterator来使用。

    你也可以转换一个元组成为一个集合:

scala> val t = ("AL""Alabama")t: (StringString) = (AL,Alabama)scala> t.productIterator.toVectorres13: Vector[Any] = Vector(AL, Alabama)
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 绝地求生刺激战场延迟高怎么办 怀孕八个半月打喷嚏头疼怎么办 20岁打喷嚏漏尿怎么办 鼻炎犯了不停打喷嚏怎么办 鼻炎犯了不停打喷嚏流鼻涕怎么办 感冒鼻痒怎么办小窍门 腰扭了屁股也疼怎么办 小三把房子过户怎么办 小三把房子卖了怎么办 打印机ip地址变了怎么办 电脑ip地址错误不能上网怎么办 修改了注册表电脑无法启动怎么办 香水喷到衣服上有印怎么办 家里一股猫的味道怎么办 干菊花里面有虫怎么办 安装时显示程序已关闭怎么办 电脑一直重启开不了机怎么办 应用安装在sd卡打不开怎么办 安装ps打不开安装包怎么办 安装好的软件打不开怎么办? win10系统语言修改不了怎么办 一个月婴儿吵夜怎么办 玩游戏一直闪退怎么办 钱站一直闪退怎么办 win7重装连不上网怎么办 笔记本屏幕横过来了怎么办 3D贴图丢了怎么办 百度文库安装后手机打不开怎么办 win7系统不带usb驱动怎么办 手机网页上的pdf打不开怎么办 网页下载pdf后缀是.do怎么办 ps界面太小怎么办win10 ps软件打不开程序错误怎么办 ps打开后 未响应怎么办 ps图层无法解锁怎么办 ie8浏览器电脑不能用怎么办 系统要ie6.0才能打开怎么办 2g手机内存不够怎么办 2g运行内存不够怎么办 手机运行内存2g不够怎么办 手机无法加载程序秒退怎么办