2012-04-02 8 views
0

このコードは正規表現で最適化できますか?正規表現はこの検索文字列に役立つでしょうか? IN: "abc d efg" OUT:["%abc%"、 "%efg%"]

search = search.split.delete_if{|s|s.length==1}.map{|s|s="%#{s}%"} 

これは文字列を受け取り、アレイにそれを分割し、1の長さを有する任意の構成要素を削除し、SQLの準備パーセントシンボルの各文字列をラップ。

の場合:"abc d efg" OUT:["%abc%","%efg%"]

+2

:複製配列を回避

string.scan(/\S{2,}/).map { |word| "%#{word}%" } 

は、私は考えることができる最速のようです。 –

+0

それは知って良いです、どのようにテストするためのアドバイス? – Jonathan

+1

Timecopが高速か遅いかを調べるのはどうでしょうか? [https://github.com/jtrupiano/timecop](https://github.com/jtrupiano/timecop) –

答えて

1

これは動作しますが、それは遅くベンチマーク、私は正規表現ベースのソリューションがより速くなるために起こっているとは思いません。私はこの実装は正規表現よりも、実際に高速であることを賭けるだろう、私の理論を裏付けるベンチマーク証拠で

words = string.split 
words.reject! { |s| s.length == 1 } 
words.map! { |s| "%#{s}%" } 
words