Scala-iterators
Scala-イテレーター
イテレータはコレクションではなく、コレクションの要素に1つずつアクセスする方法です。 iterator it の2つの基本操作は、 next と hasNext です。 * it.next()の呼び出しは、反復子の次の要素を返し、反復子の状態を進めます。 Iteratorの *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* を使用して2つの異なる操作を実行しました。 以下はプログラム例です。
例
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を使用して2つの異なる操作を実行しました。これは、反復子を1回しか通過できないためです。 以下はプログラム例です。
例
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イテレータメソッド
以下は、Iteratorで遊んでいる間に使用できる重要なメソッドです。 利用可能なメソッドの完全なリストについては、Scalaの公式ドキュメントを確認してください。
Sr.No | Methods with Description |
---|---|
1 |
def hasNext: Boolean この反復子が別の要素を提供できるかどうかをテストします。 |
2 |
def next(): A この反復子の次の要素を生成します。 |
3 |
def PLUSPLUS(that: ⇒ Iterator[A]): Iterator[A] このイテレータを別のイテレータと連結します。 |
4 |
def PLUSPLUS[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 述語を満たすtraversableまたはiteratorの要素の数をカウントします。 |
11 |
def drop(n: Int): Iterator[A] この反復子を最初のn個の要素、または反復子の長さのいずれか小さい方を超えて進めます。 |
12 |
def dropWhile(p: (A) ⇒ Boolean): Iterator[A] 指定された述語pを満たすこの反復子の要素の最長シーケンスをスキップし、残りの要素の反復子を返します。 |
13 |
def duplicate: (Iterator[A], Iterator[A]) 両方ともこの反復子と同じ要素を(同じ順序で)反復する2つの新しい反復子を作成します。 |
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 このIteratorを繰り返し走査できるかどうかをテストします。 |
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 traversableまたはiteratorが空ではないかどうかをテストします。 |
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] この通過可能要素または反復子のすべての要素を含むIterableを返します。 これは無限のイテレータでは終了しません。 |
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)と同じです。 |