Быстрее объединить регулярные выражения в хэш регулярных выражений в Ruby? - PullRequest
1 голос
/ 23 января 2011

У меня есть строка, которую я хочу отобразить в целое число. Многие строки могут отображаться в одно и то же целое число, поэтому я использую регулярные выражения для сопоставления строк, которые должны отображаться в одно и то же целое число.

Пример:

str = "hello"

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

где REGEXES - хеш, который отображает регулярное выражение в целое число.

Что лучше:

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

или

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

Ответы [ 2 ]

1 голос
/ 23 января 2011

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)

Как видите, в этом случае нет большой разницы.

IЯ бы посоветовал вам попробовать это с полным хешем регулярных выражений / целых чисел и посмотреть, является ли разница более существенной.Если есть, то есть ваш ответ.Если нет, то вы можете свободно использовать то, что имеет больше смысла.

0 голосов
/ 23 января 2011

Я бы пошел со второй версией, так как это уменьшит количество циклов цикла. Тем не менее, если слишком много значений отображаются в одно целое, вы можете разделить их на отдельные элементы хеша.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...