2014年11月25日火曜日

【ruby】文字列の置換をgsubで複数条件繰り返す場合、条件をhashで指定するとどのくらい早いのか。

gsubで文字列置換をするとき、複数組の置換をする場合、メソッドチェーンでgsubをつなげて書くこともできる。
一方組みをhashで渡して1つのgsubで書くこともできる。つどはじめのstringを全部検索しない分hashで渡すほうが
はやいはずだけどどれほど違うのかと気になった。

それぞれ下記のようなコードで50万回のループをまわす。


サンプルA

# coding:utf-8

str = "aaaaabbbbbbcccccc"

500000.times do | i |
str.gsub( /aaa/, 'AAA' ).
gsub( /bbb/, 'BBB' ).
gsub( /ccc/, 'CCC' ).
gsub( /ddd/, 'DDD' ).
gsub( /eee/, 'EEE' ).
gsub( /fff/, 'FFF' ).
gsub( /ggg/, 'GGG' ).
gsub( /hhh/, 'HHH' ).
gsub( /iii/, 'III' )
end

ruby test.rb 4.07s user 0.00s system 99% cpu 4.080 total
ruby test.rb 4.05s user 0.00s system 99% cpu 4.066 total
ruby test.rb 4.11s user 0.00s system 99% cpu 4.125 total

 gsubをつなげるタイプでは4秒程度。

サンプルB

# coding:utf-8

str = "aaaaabbbbbbcccccc"

500000.times do | i |
str.gsub( /aaa|bbb|ccc|ddd|eee|fff|ggg|hhh|iii/, "aaa"=>"AAA", "bbb"=>"BBB","ccc"=>"CCC", "ddd"=>"DDD", "eee"=>"EEE",
"fff"=>"FFF", "ggg"=>"GGG", "hhh"=>"HHH", "iii"=>"III" )
end


ruby test.rb 3.64s user 0.00s system 99% cpu 3.656 total
ruby test.rb 3.59s user 0.00s system 99% cpu 3.604 total
ruby test.rb 3.63s user 0.01s system 99% cpu 3.643 total

 hashを使うタイプは4秒弱。

 まぁ50万回繰り返してこの程度だからたいていは気にならないレベル。
コーディングの早さ優先でたいていの場合はgsubの連続にするかな。

0 件のコメント:

コメントを投稿