- Scala 教程
- Scala - 首页
- Scala - 概述
- Scala - 特性
- Scala - 环境设置
- Scala - 构建工具 (SBT)
- Scala - 基本语法
- 数据类型和变量
- Scala - 数据类型
- Scala - 变量
- Scala - 字符串
- Scala - 数组
- Scala 运算符
- Scala - 运算符
- Scala - 算术运算符
- Scala - 关系运算符
- Scala - 逻辑运算符
- Scala - 位运算符
- Scala - 赋值运算符
- Scala 条件语句
- Scala - IF ELSE
- Scala 循环语句
- Scala - 循环语句
- Scala - while 循环
- Scala - do-while 循环
- Scala - for 循环
- Scala - break 语句
- Scala 类和对象
- Scala - 类和对象
- Scala - 访问修饰符
- Scala 方法和函数
- Scala - 函数
- Scala - 按名称调用函数
- Scala - 带命名参数的函数
- Scala - 带可变参数的函数
- Scala - 递归函数
- Scala - 默认参数值
- Scala - 高阶函数
- Scala - 嵌套函数
- Scala - 匿名函数
- 部分应用函数
- Scala - 柯里化函数
- Scala 集合
- Scala - 集合
- Scala - 列表
- Scala - 集合
- Scala - 映射
- Scala - 元组
- Scala - 迭代器
- Scala - 可选项
- Scala 模式匹配
- Scala - 模式匹配
- Scala - 异常处理
- Scala - 提取器
- Scala - 正则表达式
- Scala 文件 I/O
- Scala - 文件 I/O
- Scala 高级概念
- Scala - 闭包
- Scala - 特质
- Scala 有用资源
- Scala - 快速指南
- Scala - 在线编译器
- Scala - 有用资源
- Scala - 讨论
Scala - 迭代器
迭代器不是集合,而是一种逐一访问集合元素的方式。迭代器 it 的两个基本操作是next 和hasNext。调用it.next() 将返回迭代器的下一个元素并推进迭代器的状态。您可以使用迭代器的it.hasNext 方法来确定是否还有更多元素要返回。
遍历迭代器返回的所有元素的最直接方法是使用 while 循环。让我们遵循以下示例程序。
示例
object Demo { def main(args: Array[String]) { val it = Iterator("a", "number", "of", "words") while (it.hasNext){ println(it.next()) } } }
将上述程序保存到Demo.scala 中。以下命令用于编译和执行此程序。
命令
\>scalac Demo.scala \>scala Demo
输出
a number of words
查找最小和最大值元素
您可以使用it.min 和it.max 方法从迭代器中找出最小和最大值元素。在这里,我们使用ita 和itb 执行两个不同的操作,因为迭代器只能遍历一次。以下是示例程序。
示例
object Demo { def main(args: Array[String]) { val ita = Iterator(20,40,2,50,69, 90) val itb = Iterator(20,40,2,50,69, 90) println("Maximum valued element " + ita.max ) println("Minimum valued element " + itb.min ) } }
将上述程序保存到Demo.scala 中。以下命令用于编译和执行此程序。
命令
\>scalac Demo.scala \>scala Demo
输出
Maximum valued element 90 Minimum valued element 2
查找迭代器的长度
您可以使用it.size 或it.length 方法来找出迭代器中可用的元素数量。在这里,我们使用 ita 和 itb 执行两个不同的操作,因为迭代器只能遍历一次。以下是示例程序。
示例
object Demo { def main(args: Array[String]) { val ita = Iterator(20,40,2,50,69, 90) val itb = Iterator(20,40,2,50,69, 90) println("Value of ita.size : " + ita.size ) println("Value of itb.length : " + itb.length ) } }
将上述程序保存到Demo.scala 中。以下命令用于编译和执行此程序。
命令
\>scalac Demo.scala \>scala Demo
输出
Value of ita.size : 6 Value of itb.length : 6
Scala 迭代器方法
以下是在使用迭代器时可以使用的一些重要方法。有关可用方法的完整列表,请查看 Scala 的官方文档。
序号 | 方法及描述 |
---|---|
1 |
def hasNext: Boolean 测试此迭代器是否可以提供另一个元素。 |
2 |
def next(): A 生成此迭代器的下一个元素。 |
3 |
def ++(that: => Iterator[A]): Iterator[A] 将此迭代器与另一个迭代器连接。 |
4 |
def ++[B >: A](that :=> GenTraversableOnce[B]): Iterator[B] 将此迭代器与另一个迭代器连接。 |
5 |
def addString(b: StringBuilder): StringBuilder 返回附加了元素的字符串生成器 b。 |
6 |
def addString(b: StringBuilder, sep: String): StringBuilder 返回使用分隔符字符串附加了元素的字符串生成器 b。 |
7 |
def buffered: BufferedIterator[A] 从此迭代器创建一个缓冲迭代器。 |
8 |
def contains(elem: Any): Boolean 测试此迭代器是否包含给定值作为元素。 |
9 |
def copyToArray(xs: Array[A], start: Int, len: Int): Unit 将此迭代器生成的选定值复制到数组中。 |
10 |
def count(p: (A) => Boolean): Int 计算可遍历对象或迭代器中满足谓词的元素数量。 |
11 |
def drop(n: Int): Iterator[A] 将此迭代器推进前 n 个元素,或迭代器的长度,以较小者为准。 |
12 |
def dropWhile(p: (A) => Boolean): Iterator[A] 跳过此迭代器中满足给定谓词 p 的最长元素序列,并返回剩余元素的迭代器。 |
13 |
def duplicate: (Iterator[A], Iterator[A]) 创建两个新的迭代器,它们都以相同的顺序遍历与此迭代器相同的元素。 |
14 |
def exists(p: (A) => Boolean): Boolean 如果此迭代器生成的某些值满足给定谓词 p,则返回 true,否则返回 false。 |
15 |
def filter(p: (A) => Boolean): Iterator[A] 返回一个迭代器,该迭代器遍历满足谓词 p 的此迭代器中的所有元素。元素的顺序保持不变。 |
16 |
def filterNot(p: (A) => Boolean): Iterator[A] 创建一个迭代器,遍历不满足谓词 p 的此迭代器中的所有元素。 |
17 |
def find(p: (A) => Boolean): Option[A] 查找迭代器生成的第一个满足谓词的值(如果有)。 |
18 |
def flatMap[B](f: (A) => GenTraversableOnce[B]): Iterator[B] 通过将函数应用于此迭代器生成的所有值并连接结果来创建一个新的迭代器。 |
19 |
def forall(p: (A) => Boolean): Boolean 如果给定谓词 p 对此迭代器生成的所有值都成立,则返回 true,否则返回 false。 |
20 |
def foreach(f: (A) => Unit): Unit 将函数 f 应用于此迭代器生成的所有值。 |
21 |
def hasDefiniteSize: Boolean 对于空迭代器返回 true,否则返回 false。 |
22 |
def indexOf(elem: B): Int 返回此可迭代对象中指定对象的第一次出现的索引。 |
23 |
def indexWhere(p: (A) => Boolean): Int 返回满足谓词的第一个生成值的索引,或 -1。 |
24 |
def isEmpty: Boolean 如果 hasNext 为 false,则返回 true,否则返回 false。 |
25 |
def isTraversableAgain: Boolean 测试此迭代器是否可以重复遍历。 |
26 |
def length: Int 返回此迭代器中的元素数量。此方法返回后,迭代器处于其末尾。 |
27 |
def map[B](f: (A) => B): Iterator[B] 返回一个新的迭代器,该迭代器通过将函数 f 应用于此迭代器生成的每个值来转换该值。 |
28 |
def max: A 查找最大元素。此方法返回后,迭代器处于其末尾。 |
29 |
def min: A 查找最小元素。此方法返回后,迭代器处于其末尾。 |
30 |
def mkString: String 在字符串中显示此可遍历对象或迭代器中的所有元素。 |
31 |
def mkString(sep: String): String 使用分隔符字符串在字符串中显示此可遍历对象或迭代器中的所有元素。 |
32 |
def nonEmpty: Boolean 测试可遍历对象或迭代器是否不为空。 |
33 |
def padTo(len: Int, elem: A): Iterator[A] 将元素值附加到此迭代器,直到达到给定的目标长度。 |
34 |
def patch(from: Int, patchElems: Iterator[B], replaced: Int): Iterator[B] 返回此迭代器,其中包含已修补的值。 |
35 |
def product: A 将此集合的元素相乘。 |
36 |
def sameElements(that: Iterator[_]): Boolean 如果两个迭代器都以相同的顺序生成相同的元素,则返回 true,否则返回 false。 |
37 |
def seq: Iterator[A] 返回集合的顺序视图。 |
38 |
def size: Int 返回此可遍历对象或迭代器中的元素数量。 |
39 |
def slice(from: Int, until: Int): Iterator[A] 创建一个迭代器,返回此迭代器生成的值的区间。 |
40 |
def sum: A 返回此可遍历对象或迭代器中所有元素相对于 num 中的 + 运算符的和。 |
41 |
def take(n: Int): Iterator[A] 返回一个迭代器,该迭代器仅生成此迭代器的前 n 个值,或者如果它生成少于 n 个值,则生成整个迭代器。 |
42 |
def toArray: Array[A] 返回一个包含此可遍历对象或迭代器中所有元素的数组。 |
43 |
def toBuffer: Buffer[B] 返回一个包含此可遍历对象或迭代器中所有元素的缓冲区。 |
44 |
def toIterable: Iterable[A] 返回一个包含此可遍历对象或迭代器中所有元素的可迭代对象。对于无限迭代器,这将不会终止。 |
45 |
def toIterator: Iterator[A] 返回一个包含此可遍历对象或迭代器中所有元素的迭代器。对于无限迭代器,这将不会终止。 |
46 |
def toList: List[A] 返回一个包含此可遍历对象或迭代器中所有元素的列表。 |
47 |
def toMap[T, U]: Map[T, U] 返回一个包含此可遍历对象或迭代器中所有元素的映射。 |
48 |
def toSeq: Seq[A] 返回一个包含此可遍历对象或迭代器中所有元素的序列。 |
49 |
def toString(): String 将此迭代器转换为字符串。 |
50 |
def zip[B](that: Iterator[B]): Iterator[(A, B) 返回一个新的迭代器,其中包含由此迭代器的对应元素组成的对。新迭代器返回的元素数量与迭代器(A 或 B)返回的元素数量的最小值相同。 |