2011-01-23 7 views
1

私は整数にマップしたい文字列を持っています。多くの文字列は同じ整数にマップすることができるので、正規表現を使用して同じ整数にマップする文字列を照合します。Rubyの正規表現のハッシュで正規表現を統合する方が速いのですか?

例:

正規表現は、整数に正規表現をマッピングするハッシュある
str = "hello" 

REGEXES.each do |key, val| 
    if str =~ key 
    print val 
    end 
end 

。優れている

REGEXES = [/hello/ => 2, /foo/ => 2, /bar/ => 3] 

または

REGEXES = [/(hello|foo)/ => 2, /bar/ => 3] 
+0

どのような観点からすれば「より良い」とはどういう意味ですか?そしてそれらは真の正規表現ですか、それともそれらより複雑ですか? – ircmaxell

答えて

1

Benchmarkはあなたの友達です:

require 'benchmark' 

str = 'hello' 
num = 1000000 

Benchmark.bmbm do |x| 
    x.report('individual keys:') do 
    regexes = [/hello/ => 2, /foo/ => 2, /bar/ => 3] 

    num.times do 
     regexes.each {|key, val| str =~ key} 
    end 
    end 

    x.report('combined keys: ') do 
    regexes = [/(hello|foo)/ => 2, /bar/ => 3] 

    num.times do 
     regexes.each {|key, val| str =~ key} 
    end 
    end 
end 

結果:

Rehearsal ---------------------------------------------------- 
individual keys:   1.600000   0.010000   1.610000 ( 1.780246) 
combined keys:     1.610000   0.010000   1.620000 ( 1.761067) 
------------------------------------------- total: 3.230000sec 

                       user     system      total        real 
individual keys:   1.570000   0.000000   1.570000 ( 1.589879) 
combined keys:     1.590000   0.010000   1.600000 ( 1.678724) 

このように、大きな違いはありません。

正規表現/整数の完全なハッシュで試してみて、その違いがより重要かどうかを確認することをお勧めします。あなたの答えがあります。もしそうでなければ、もっと意味のあるものを自由に使うことができます。

0

ループサイクル数を減らすため、2番目のバージョンを使用します。それでも同じintに値があまりにも多くマッピングされている場合は、それらを別々のハッシュ要素に分割できます。

関連する問題