一方組みを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 件のコメント:
コメントを投稿