2

私はこの2つの文字列string1とを持っていますstring2string2に存在するかどうかを確認するための私の最良のオプションは何ですかstring1。Rubyで実装するにはどうすればよいですか。現在、Regexマッチを使用しています。

4

2 に答える 2

7
1.9.3p194 :016 > Benchmark.measure{ 1_000_000.times{ 'asd'['a'] } }
 =>   0.430000   0.000000   0.430000 (  0.431638)

1.9.3p194 :017 > Benchmark.measure{ 1_000_000.times{ 'asd' =~ /a/ } }
 =>   0.420000   0.000000   0.420000 (  0.415391)

1.9.3p194 :018 > Benchmark.measure{ 1_000_000.times{ 'asd'.include? 'a' } }
 =>   0.340000   0.000000   0.340000 (  0.343843)

驚いたことに、count('a') > 0私に良い結果をもたらしています:

1.9.3p194 :031 >   Benchmark.measure{ 10_000_000.times{ 'asd'.count('a') > 0 } }
 =>   3.100000   0.000000   3.100000 (  3.099447)

1.9.3p194 :032 > Benchmark.measure{ 10_000_000.times{ 'asd'.include?('a') } }
 =>   3.220000   0.000000   3.220000 (  3.226521)

しかし:

# count('a') > 0
1.9.3p194 :056 >   Benchmark.measure{ 10_000_000.times{ 'asdrsguoing93hafehbsefu3nr3wrbibaefiafb3uwfniw4ufnsbei'.count('a') > 0 } }
 =>   3.630000   0.000000   3.630000 (  3.633329)
# include?('a')
1.9.3p194 :057 > Benchmark.measure{ 10_000_000.times{ 'asdrsguoing93hafehbsefu3nr3wrbibaefiafb3uwfniw4ufnsbei'.include?('a') } }
 =>   3.220000   0.000000   3.220000 (  3.224986)
# =~ /a/
1.9.3p194 :058 > Benchmark.measure{ 10_000_000.times{ 'asdrsguoing93hafehbsefu3nr3wrbibaefiafb3uwfniw4ufnsbei' =~ /a/ } }
 =>   3.040000   0.000000   3.040000 (  3.043130)

したがって、パフォーマンスについて厳密に言えば、文字列の分布を考慮してテストを行う必要があります (これはめったにランダムではありません)。表現力について言えば、おそらくinclude?最良の選択です。

于 2012-08-01T12:40:12.710 に答える
0

試す

string1.include? string2

それは仕事をするべきです

于 2012-08-01T11:30:44.047 に答える