2012-01-26 12 views
0

私は文字列の数を検索し、それらを1つの文字列に一致させるコードを使用しています。c# - String Matching

私のコード:

foreach (string needle in list) 
{ 
    if (Regex.IsMatch(haystack,needle)) 
    { 
     //do some stuff 
    } 
} 

は、マッチング処理を高速化する方法はありますか?

+0

特定の針が見つかったか、少なくとも1つの針が干し草の中に入っていればいいですか? – Gregor

+1

例、数字、サイズ、必要なパフォーマンス? –

+0

多分.Matches()か。 –

答えて

2

正規表現が妥当であれば、あなたの現在のアプローチは大体可能です。文字列で静的なIsMatchの代わりにコンパイルされた正規表現を使用することを検討してください。

もっと速いスピードが必要な場合は、より良いアルゴリズム(つまりhttp://en.wikipedia.org/wiki/String_searching_algorithmで開始)を検討すると、個々のパターンよりも速く検索することができます。

パフォーマンス上の問題がある場合と同様に、測定値を置換することはできません。試して比較してください。

0

あなたは少なくともO(n)の複雑さを暗示するように、リスト全体を調べなければなりません。プロセスをスピードアップする方法の1つは、リストをソートすることですが、アルゴリズムの複雑さがO(n Log n)に増加するだけです。