を処理したい場合は、直接奇妙なものを反復処理するための方法です:
val fruits: List[String] = List("apples", "oranges", "pears", "bananas")
//> fruits : List[String] = List(apples, oranges, pears, bananas)
val oddFruitsIterator =
Iterator.from(1, 2).takeWhile(_ < fruits.size).map(fruits(_))
//> oddFruits : Iterator[String] = non-empty iterator
oddFruitsIterator.foreach(println)
//> oranges
//> bananas
それは大規模なコレクションである場合と、 /または多くの反復を行っている場合は、最初にIndexedSeq
に変換することを検討して、fruits(_)
がO(1)であると考えてください。たとえば、次のようになります。
val fruitsIs = fruits.toIndexedSeq
val oddFruits = Iterator.from(1, 2).takeWhile(_ < fruitsIs.size).map(fruitsIs(_))
イテレータ自体は反復処理中のコレクションとは別のものです。ここではそれがより明確になり、別の例である:
scala> val oddSeqIterator =
(seq: Seq[String]) => Iterator.from(1, 2).takeWhile(_ < seq.size).map(seq(_))
oddSeqIterator: Seq[String] => Iterator[String] = <function1>
scala> val fruits: List[String] = List("apples", "oranges", "pears", "bananas")
fruits: List[String] = List(apples, oranges, pears, bananas)
scala> oddSeqIterator(fruits)
res0: Iterator[String] = non-empty iterator
scala> res0.foreach(println)
oranges
bananas
これまでの回答は、奇数メンバーを介するものではありません。代わりに、彼らは奇妙なメンバーのリストを作成します(それは当然反復することができます)。しかし、それらを直接反復する単純な方法が必要ですか? –