From: "俊(とし)" Date: 2009-09-12T07:29:18+09:00 Subject: [ruby-list:46381] Re: 最も低コストの方法は? きむらさん,るびきちさん, ご回答ありがとうございます. Array#all は試していませんでした.わたしのチェック不足.また,Array#any? や Array#none? はそもそも知りませんでした.これも勉強不足.残念ながら, 私の用途の場合,空を nil では表現していないため,この方法は別の機会に 試してみたいと思います. それから,benchmark というライブラリも始めて知りました.便利ですね. これから使いたいと思います.こういうものを知らなかったので,詳細な プロファイリングってどうすればよいのかも知りませんでした.失礼. > RUBY_VERSION # => "1.8.8" > # >> user system total real > # >> empty_ary 0.000000 0.000000 0.000000 ( 0.001170) > # >> uniq 0.030000 0.000000 0.030000 ( 0.037613) > # >> each 0.000000 0.000000 0.000000 ( 0.008068) > # >> all 0.010000 0.000000 0.010000 ( 0.011180) > # >> user system total real > # >> empty_ary 0.030000 0.000000 0.030000 ( 0.023194) > # >> uniq 0.020000 0.000000 0.020000 ( 0.039152) > # >> each 0.130000 0.000000 0.130000 ( 0.154927) > # >> all 0.110000 0.000000 0.110000 ( 0.139925) > > > RUBY_VERSION # => "1.9.2" > # >> user system total real > # >> empty_ary 0.000000 0.000000 0.000000 ( 0.001076) > # >> uniq 0.020000 0.000000 0.020000 ( 0.027756) > # >> each 0.010000 0.000000 0.010000 ( 0.002645) > # >> all 0.000000 0.000000 0.000000 ( 0.008598) > # >> user system total real > # >> empty_ary 0.010000 0.000000 0.010000 ( 0.019093) > # >> uniq 0.040000 0.000000 0.040000 ( 0.030770) > # >> each 0.040000 0.000000 0.040000 ( 0.049135) > # >> all 0.060000 0.000000 0.060000 ( 0.079198) さて,結果は大変興味深いものでした.内容によって結果が異なるのは ある程度想像できるものの,メソッドによる差は意外なものでした. ermpty_ary が安定して速いのは想像通りですが,uniq と each が,配列の 中身によって逆転するところが大変微妙.each の場合,空でない要素に 出会うとループを脱出するので,有利ではないかと思っていたのですが, uniq に負けることがあるというのが大変興味深いです.配列の要素が 全て空だと uniq はかなり速い.Hash の生成効率が高いのでしょうか? いずれにせよ,大変ありがとうございました.勉強になりました. -- 俊(とし) * 望湖庵日記 http://griffin.cocolog-nifty.com/lakesidedairy/