ScalaのArrayなどで、Rubyのeach_with_indexのようなインデックス付きイテレーションを使う

2013年3月28日

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にあるメソッドなのですが
もう一つ、zipWithIndexscala.collection.Iteratorにも存在しています。
こちらの方はパフォーマンスが良いようで
こちらを使いたいと思います。

[scala]list.iterator.zipWithIndex.foreach{ case(value, index) => println("%d番目は%sです".format(index, value)) }[/scala]

と、listzipWithIndexの間にiteratorを入れるだけですね。

これでパフォーマンスが上がります。

アンケート

Ruby, Scala

Posted by GENDOSU