巨大なコード(平均長900000文字)に特定の一致文字列の前後に文字列を挿入する小さな部分があります。最適化された文字列挿入アルゴリズム
例:
Loremのイプサムは、単に印刷と植字 業界のダミーテキストです。 Lorem Ipsumは、未知のプリンタがタイプのガレーを取り、 がタイプの標本を作るためにそれをスクランブルした1500s以来、これまでに業界標準のダミーテキスト であった。
Loremのイプサムは
<span class="class1 class2">printing</span>
と植字業界の単にダミーテキストです。で置き換え
Lorem Ipsumは<span class="class1 class2 class3">been</span>
業界の標準的なダミーテキスト<span class="class1">ever since the 1500s</span>
を持っています。これは、未知のプリンタがタイプのガレーを取り、それをスクランブルしてタイプの標本を作るときです。
これまでのところ良いです。検索と置換ができるだけですが、内容は幾分意味があるので、その場合はprinting
が置き換えられましたが、テキストの他の場所にはない可能性があります。 私たちが行ったことは、テキストを置き換えたいところのインデックスだったので、すべての置換の開始位置と終了位置を取得します。
現在のコード:900000文字長い文字列を解析
new_val = huge_string_goes_here
entities.each { |entity|
add_before = "<span class=\"#{entity.getStuff}\">"
add_after = '</span>'
new_val.insert(entity.getStart+increment, add_before)
increment = increment+add_before.length
new_val.insert(entity.getEnd+increment, add_after)
increment = increment+add_after.length
}
は約15〜20秒を取っています。
私たちがどのように最適化できるかについてご意見はありますか?操作のこの種のは、はるかに高速ネイティブに解釈したコードと比べなければなりません -
は
これはおそらくhttp://codereview.stackexchange.comサイトにあるはずです。 –
Mac OSやLinuxをお使いの場合は、 'sed'を見てください。これはこのタスクのために設計されており、非常に高速です。 –