2012-04-02 16 views
0

Kann dieser Code mit einem Regex optimiert werden?Würde ein regulärer Ausdruck diese Suchzeichenfolge unterstützen? IN: "abc d efg" OUT: ["% abc%", "% efg%"]

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

Es dauert eine Zeichenfolge, teilt sie in einem Array und entfernt alle Elemente mit einer Länge von 1 und wickelt jede Zeichenfolge in Prozent Symbole bereit für SQL.

IN: "abc d efg" OUT: ["%abc%","%efg%"]

+2

Ohne Benchmark Beweis meiner Theorie zu unterstützen, würde ich darauf wetten, dass diese Implementierung als ein regex tatsächlich schneller ist. –

+0

Das ist gut zu wissen, irgendwelche Tipps zum Testen? – Jonathan

+1

Wie wäre es mit Timecop, um zu sehen, ob es schneller oder langsamer ist? [https://github.com/jtrupiano/timecop](https://github.com/jtrupiano/timecop) –

Antwort

1

Dies funktioniert, aber es Benchmarks langsamer, ich denke nicht, eine regex-basierte Lösung schneller sein wird.

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

Duplizieren Arrays vermeiden scheint der schnellste zu sein, die ich mir vorstellen kann:

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