scala基础------>Trait Iterable
来源:互联网 发布:task host windows 编辑:程序博客网 时间:2024/05/23 01:23
Trait Iterable
自下而上的容器(collection)层次结构具有可迭代的Trait。Trait的所有方法可定义为一个抽象方法,逐个生成容器(collection)元素迭代器。Traversable Trait的foreach方法实现了迭代器的Iterable。下面是具体的实现。
def foreach[U](f: Elem => U): Unit = {
val it = iterator
while (it.hasNext) f(it.next())
}
许多Iterable 的子类覆写了Iteable的foreach标准实现,因为它们提供了更多有效的实现。记住,由于性能问题,foreach是Traversable所有操作能够实现的基础。
Iterable有两个方法返回迭代器:grouped和sliding。然而,这些迭代器返回的不是单个元素,而是原容器(collection)元素的全部子序列。这些最大的子序列作为参数传给这些方法。grouped方法返回元素的增量分块,sliding方法生成一个滑动元素的窗口。两者之间的差异通过REPL的作用能够清楚看出。
scala> val xs = List(1, 2, 3, 4, 5)
xs: List[Int] = List(1, 2, 3, 4, 5)
scala> val git = xs grouped 3
git: Iterator[List[Int]] = non-empty iterator
scala> git.next()
res3: List[Int] = List(1, 2, 3)
scala> git.next()
res4: List[Int] = List(4, 5)
scala> val sit = xs sliding 3
sit: Iterator[List[Int]] = non-empty iterator
scala> sit.next()
res5: List[Int] = List(1, 2, 3)
scala> sit.next()
res6: List[Int] = List(2, 3, 4)
scala> sit.next()
res7: List[Int] = List(3, 4, 5)
当只有一个迭代器可用时,Trait Iterable增加了一些其他方法,为了能被有效的实现的可遍历的情况。这些方法总结在下面的表中。
Trait Iterable操作
在Iterable下的继承层次结构你会发现有三个traits:Seq,Set,和 Map。这三个Traits有一个共同的特征,它们都实现了PartialFunction trait以及它的应用和isDefinedAt 方法。然而,每一个trait实现的PartialFunction 方法却各不相同。
例如序列,使用用的是位置索引,它里面的元素的总是从0开始编号。即Seq(1, 2, 3)(1)
为2。例如sets,使用的是成员测试。例如Set('a', 'b', 'c')('b')
算出来的是true,而Set()('a')
为false。最后,maps使用的是选择。比如Map('a' -> 1, 'b' -> 10, 'c' -> 100)('b')
得到的是10。
拉链操作:
- scala基础------>Trait Iterable
- SCALA 集合框架文档翻译-Trait Iterable
- scala基础----trait操作
- scala基础-----Trait Traversable
- scala基础之特质trait
- scala基础16-trait初探/对象中混入trait
- Scala基础—Trait使用示例
- Scala:trait
- Scala Trait
- Scala Trait
- Scala-trait
- scala基础---->序列trait:Seq、IndexedSeq及LinearSeq
- scala基础---->序列trait:Seq、IndexedSeq及LinearSeq
- scala中的trait
- Scala Trait 的线性化
- Scala 有趣的Trait
- scala——trait
- Scala的Trait
- android选择时间攻略
- 【VS开发】使用WinPcap编程(2)——打开网络设备并且开始捕获数据包
- Xutils之ViewUtils解析
- 常见排序算法
- 软件工程学习总结
- scala基础------>Trait Iterable
- 【白话设计模式三】迭代器模式(Iterator)
- [刷题]算法竞赛入门经典(第2版) 4-10/UVa815 - Flooded!
- 索引合并和组合索引的比较
- Python学习记录4(语句)
- android开发之添加标签与删除标签
- Oracle数据库双机热备方案
- 静态资源文件自动压缩并替换成压缩版本(大型网站优化技术)
- spring+springmvc基于axis1.4的webservice开发与https配置(一)