私は、フィルターを介して (おそらく大きい) テキストのチャンクを配置する MVC C# アプリの検索機能に取り組んでおり、検索クエリを指定する<span>
と、各検索語の前後に強調表示されたスタイルの html を配置します。
単純なアルゴリズムが動作していますが、おそらく作成する必要がある文字列の量 (2 * 一致の数) が原因で、遅くなる気がします。
public static string Surround(string original, string head, string tail, string match, StringComparison comparer)
{
var ret = original;
if (ret.IndexOf(match, 0, comparer) != -1)
{
var lastIndex = 0;
while ((lastIndex = ret.IndexOf(match, lastIndex, comparer)) != -1)
{
ret = ret.Insert(lastIndex, head);
var tailIndex = lastIndex + match.Length + head.Length;
lastIndex = tailIndex;
ret = ret.Insert(tailIndex, tail);
}
}
return ret;
}
大きなテキストのチャンクに対してより良いパフォーマンスを発揮するより良いアルゴリズムのヒントを誰かが与えることができるかどうか疑問に思っていますか? stringbuilder を使用することを考えていましたが、まったく間違った方法でこれに取り組んでいる可能性があることにも気付きました。どんな洞察も大歓迎です。