ScalaのArrayなどで、Rubyのeach_with_indexのようなインデックス付きイテレーションを使う
Rubyでは
[scala]['one’, 'two’, 'three’].each_with_index |value, index|
p "#{index}番目は#{value}です"
end[/scala]
というような書き方が出来ます。
これをScalaで書くにはどうするか。
[scala]
val list = List("one", "two", "three")
list.zipWithIndex.foreach{ case(value, index) => println("%d番目は%sです".format(index, value)) }[/scala]
という感じになります。
さて、このzipWithIndexですが、ややパフォーマンスが悪いのが難点です。
このzipWithIndexというのは、scala.collection.ItelateLikeにあるメソッドなのですが
もう一つ、zipWithIndexがscala.collection.Iteratorにも存在しています。
こちらの方はパフォーマンスが良いようで
こちらを使いたいと思います。
[scala]list.iterator.zipWithIndex.foreach{ case(value, index) => println("%d番目は%sです".format(index, value)) }[/scala]
と、listとzipWithIndexの間にiteratorを入れるだけですね。
これでパフォーマンスが上がります。