
- 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)返回的元素數量的最小值相同。 |