English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Scala Iterator(イテレータ)

Scala 集合

Scala Iterator(イテレータ)はコレクションではなく、コレクションにアクセスするための方法です。

イテレータ it の二つの基本操作は next および hasNext

呼び出し it.next() はイテレータの次の要素を返し、イテレータの状態を更新します。

呼び出し it.hasNext() コレクションにまだ要素があるかどうかを検出するために使用されます。

イテレータ it が各要素を順次返す最も簡単な方法は while ループを使用することです:

object Test {
   def main(args: Array[String]) {
      val it = Iterator("百度", "Google", "w3codebox", "淘宝")
      
      while(it.hasNext){
         println(it.next())
      }
   }
}

上記のコードを実行すると、以下の結果が表示されます:

$ scalac Test.scala 
$ scala Test
百度
Google
w3codebox
淘宝

最大および最小の要素を検索する

次を使用して it.min および it.max メソッドはイテレータから最大および最小の要素を検索し、以下に例を示します:

object Test {
   def main(args: Array[String]) {
      val ita = Iterator(20,40,2,50,69, 90)
      val itb = Iterator(20,40,2,50,69, 90)
      
      println("最大の要素は:" + ita.max)
      println("最小の要素は:" + itb.min)
   }
}

上記のコードを実行すると、以下の結果が表示されます:

$ scalac Test.scala 
$ scala Test
最大の要素は:90
最小の要素は:2

イテレータの長さを取得

次を使用して it.size または it.length 要素の数を確認するメソッドを示します。以下の例を参照してください:

object Test {
   def main(args: Array[String]) {
      val ita = Iterator(20,40,2,50,69, 90)
      val itb = Iterator(20,40,2,50,69, 90)
      
      println("ita.sizeの値: " + ita.size)
      println("itb.lengthの値: " + itb.length)
   }
}

上記のコードを実行すると、以下の結果が表示されます:

$ scalac Test.scala 
$ scala Test
ita.sizeの値: 6
itb.lengthの値: 6

Scala Iterator 常用メソッド

以下の表は Scala Iterator 常用のメソッドを示しています:

番号メソッド及び説明
1

def hasNext: Boolean

返すことができる要素がまだある場合、trueを返します。

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

Stringを StringBuilder b に追加

6

def addString(b: StringBuilder, sep: String): StringBuilder

Stringを StringBuilder b に追加し、区切り文字を指定

7

def buffered: BufferedIterator[A]

イテレータを BufferedIterator に変換

8

def contains(elem: Any): Boolean

検索イテレータ内に指定された要素が含まれているかどうか

9

def copyToArray(xs: Array[A], start: Int, len: Int): Unit

イテレータの中から選択された値を配列に渡します

10

def count(p: (A) => Boolean): Int

条件pを満たす要素の総数を返します

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を満たす要素が存在するかどうかを示す布尔値を返します

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]

pを満たす最初の要素を返しますまたはNone。注意:条件を満たす要素が見つかった場合、イテレータはその要素の後ろに置かれます;見つからない場合は、終点に置かれます

18

def flatMap[B](f: (A) => GenTraversableOnce[B]): Iterator[B]

f関数を適用するイテレータのシーケンスの各要素に対して、結果シーケンスのイテレータを適用します

19

def forall(p: (A) => Boolean): Boolean

itが指す要素がpを満たすかどうかを示す布尔値を返します

20

def foreach(f: (A) => Unit): Unit

指定されたプログラムfをイテレータから返される各要素に実行します

21

def hasDefiniteSize: Boolean

イテレータの要素数が有限であればtrueを返します(デフォルトではisEmptyに等しい)

22

def indexOf(elem: B): Int

indexがxに等しい最初の要素を返します。注意:イテレータはこの要素を越えます。

23

def indexWhere(p: (A) => Boolean): Int

条件p满足的下标处的元素を返します。注意:イテレータはこの要素を越えます。

24

def isEmpty: Boolean

itが空かどうかを確認し、空であればtrue、そうでなければfalseを返却(hasNextの逆)

25

def isTraversableAgain: Boolean

このイテレータが繰り返し巡回可能かどうかをテスト

26

def length: Int

イテレータの要素数を返却

27

def map[B](f: (A) => B): Iterator[B]

itの各要素を関数fに渡し、結果を新しいイテレータに生成

28

def max: A

イテレータのイテレータ要素の中で最大の要素を返却

29

def min: A

イテレータのイテレータ要素の中で最小の要素を返却

30

def mkString: String

イテレータのすべての要素を文字列に変換

31

def mkString(sep: String): String

イテレータのすべての要素を文字列に変換し、区切り文字を指定

32

def nonEmpty: Boolean

コンテナに要素が含まれているかどうかを確認(hasNextに相当)

33

def padTo(len: Int, elem: A): Iterator[A]

まずイテレータのすべての要素を返却し、elemを追加して長さがlenになるまで。

34

def patch(from: Int, patchElems: Iterator[B], replaced: Int): Iterator[B]

新しいイテレータを返却し、from番目の要素から始まりreplaced個の要素がイテレータが指している要素で置き換わる。

35

def product: A

返却したイテレータの数値型要素の積を返却

36

def sameElements(that: Iterator[_]): Boolean

イテレータと指定されたイテレータパラメータが連続して同じ要素を返却するかどうかを判断

37

def seq: Iterator[A]

コレクションのシーケンスビューを返却

38

def size: Int

イテレータの要素数を返却

39

def slice(from: Int, until: Int): Iterator[A]

新しいイテレータを返却し、イテレータが指しているシーケンスの要素からfrom番目の要素からuntil番目の要素までの範囲のスライスを指す。

40

def sum: A

返却したイテレータの数値型要素の和

41

def take(n: Int): Iterator[A]

前の n 个要素を持つ新しいイテレータを返します。

42

def toArray: Array[A]

イテレータが指すすべての要素を配列に格納し、返します。

43

def toBuffer: Buffer[B]

イテレータが指すすべての要素をバッファー Buffer にコピーします。

44

def toIterable: Iterable[A]

この可変なすべての要素を含むIterableを返します。無限イテレータの場合、終了しません。

45

def toIterator: Iterator[A]

イテレータのすべての要素をイテレータコンテナに格納し、返します。

46

def toList: List[A]

イテレータのすべての要素をリストに格納し、返します。

47

def toMap[T, U]: Map[T, U]

イテレータのすべてのキーペアをMapに格納し、返します。

48

def toSeq: Seq[A]

イテレータのすべての要素をSeqコンテナに格納し、返します。

49

def toString(): String

イテレータを文字列に変換します。

50

def zip[B](that: Iterator[B]): Iterator[(A, B)]

返される新しいイテレータは、指定されたイテレータの要素が一一対応する二元組のシーケンスを指します。

さらに多くの方法については参照してください API 文書

Scala 集合