土岐です。 From: Sinichiro Dezawa <dezawa / miya.fujifilm.co.jp> Subject: [ruby-list:11690] Re: Numeric#step の増減方向 Date: Sun, 24 Jan 1999 22:57:18 +0900 > これは減らしができないので、厄介でした。 > 私も step は存在を知らない口でしたが、これからはこれで行こう。 > ところで、step +1 でよい時はどっちちの方が軽いのでしょう? min..max だと Range オブジェクトに変換されるので、step の方が速いんじゃ ないかと思います。でも、step +1 だと実は step イテレータを使う必要はな くて、upto という専用のイテレータがあったりします(リファレンスマニュア ルによると、Range は upto を呼んでいるようです)。step -1 のときは downto イテレータが使えます。さらに初期値が 0 から始まるときは times というイテレータがあり、わたしはこのイテレータをよく使ってます。そして step イテレータの出番はどんどん減ってゆくのでした。 ワン・ライナーで各イテレータの簡単なベンチマークをとってみました。やは り Range オブジェクトはオーバーヘッドがある分、遅いみたいです。あれ、 わたしは upto より times の方が速そうな印象を持ってたんだけど、逆です ね、ちょっと意外だった。 % time ruby -e '(1..1000000).each{|i|}' 6.279u 0.019s 0:07.23 86.8% 362+489k 0+4io 0pf+0w % time ruby -e '1.step(1000000, 1){|i|}' 3.844u 0.029s 0:04.67 82.6% 360+485k 0+6io 0pf+0w % time ruby -e '1.upto(1000000){|i|}' 3.582u 0.009s 0:04.33 82.6% 360+486k 0+6io 0pf+0w % time ruby -e '1000000.times{|i|}' 3.865u 0.009s 0:04.70 82.1% 362+489k 0+6io 0pf+0w ---------------------------------------------------------------------------- 土岐 仁謙 神戸大学高エネ研 M1 URL: http://www3.phys.sci.kobe-u.ac.jp/~toki/index.html PGP fingerprint = D0 A8 90 AB 73 F8 34 FE CE CA DB BF 01 30 C0 35