2012-03-19 1 views

答えて

9

あなただけの先頭に終わりから、それを反復処理する場合は、reverseIteratorを呼び出すことができます。マップを適用する場合は、reverseMapfoldLeftfoldRightは逆の方向にトラバースするため、逆のリストでそれぞれを別のものと考えることができます。同様にreduceRightおよびscanRightである。開始の代わりに終わりの近くにあるものを見つける方法は、lastの束があります。それ以外の場合はreverse(コレクション全体を再作成する場合)または.view.reverse.whateverを使用してコレクションをメモリに複製しない場合は、簡単な場合はforeachreverseIteratorが一般的にこのトリックを行います。

+0

私はそのような方法が存在したことを思い出さなかった!私はその日の質問に答える時間がなかったのでとてもうれしいです:...-) –

+0

@ DanielC.Sobral - 私はむしろそれが全く存在しないことに失望したので、私はそれを覚えました。私は想像できるすべての便利な方法を持っているよりも、私のコレクションのインターフェースがシンプルである方が好きです。 –

4

あなたはそれを逆にすることができます:

scala> val x = IndexedSeq(1,2,3,4) 
x: IndexedSeq[Int] = Vector(1, 2, 3, 4) 

scala> x.reverse.foreach(println) 
4 
3 
2 
1 

それとも、あなたが反復している間、あなたがやっていることに応じて、foldRightはあなたが望むものであるかもしれないが。 foldRightは、コレクションを右から左に移動する折りたたみです。

scala> x.foldRight(0){ (item, total) => println("adding "+item); total + item } 
adding 4 
adding 3 
adding 2 
adding 1 
res121: Int = 10 
+0

ありがとうございました。メソッドのリストを見ている間、明白な '逆'を見逃してしまった。 – Ivan

関連する問題