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: (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.getClassres6: Class[_ <: (String, String)] = class scala.Tuple2scala> b.getClassres7: Class[_ <: (String, String)] = class scala.Tuple2scala> c.getClassres8: 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.productIteratorit: Iterator[Any] = non-empty iteratorscala> for (e <- it) println(e)ALAlabama
使用iterator遍历元组,在使用完一次以后,就不能再用了。如果你需要再次遍历这个元组,那么你需要构造一个新的iterator来使用。
你也可以转换一个元组成为一个集合:
scala> val t = ("AL", "Alabama")t: (String, String) = (AL,Alabama)scala> t.productIterator.toVectorres13: Vector[Any] = Vector(AL, Alabama)
阅读全文
0 0
- scala中的tuple元组
- scala中的元组(Tuple)
- scala学习-scala中的元组Tuple概念
- Scala学习笔记之元组`Tuple`
- scala 元组tuple的几个知识点
- Swift中的元组(Tuple)
- scala编程系列(4)-scala元组tuple
- Scala中的元组
- scala 元组tuple的几个知识点-提供分
- Scala中常见的容器 元组 Tuple
- Scala中Tuple(元组)的使用
- c++11中的tuple(元组)
- c++11中的tuple(元组)
- c++11中的tuple(元组)
- c++11中的tuple(元组)
- c++11中的tuple(元组)
- c++11中的tuple(元组)
- C++ 中的 "tuple"(元组)容器
- Sublime Text 3配置php语法错误提示插件PHPCS
- hihoCoder1319 岛屿周长 (bfs)
- myeclipse2016-ci破解疑难杂症问题整理
- springcloud初学者--Spring Data Jpa
- C语言中%d %.2d %2d %02d的区别
- scala中的tuple元组
- hdu2131 Probability(C语言)
- std::function的使用
- CF835C-Star sky
- Android好文章记载
- CSS 定位中的 absoult 最难理解的 position 图文
- const的使用
- windows server 英文版显示中文乱码解决方案
- 企业级应用vs企业级开发