我將成千上萬的文檔從一種標記格式(顯然是RUNOFF的一些後代,對此我有最少的文檔)轉換成我可以提供給LaTeX的東西。該過程的一部分涉及在每個文檔中搜索每個具有特殊含義的字符串,並將其替換爲LaTeX的適當字符串。有數百個這樣的。到目前爲止,我的兩個想法是將每個做爲一個單獨的gsub或者用正則表達式構造一個gsub,它將匹配(通過ORing)許多符號,然後將匹配傳遞給具有大的case語句的方法退回適當的替代品。表面上看,第二種方式減少了每個文檔必須被掃描的次數,但是正則表達式中OR的開銷可能會更加昂貴。有沒有人知道哪種方法更好,或者我錯過了一個好方法?做許多不同的gsub操作的最快方法?
下面是我描述的兩種方式的例子。他們可能不完美。只是想明白我的觀點。
方法1:
output.gsub!(/a<-"/, '\\"{a}') # ä
output.gsub!(/a<-^/, '\\^{a}') # â
output.gsub!(/a<-~/, '\\~{a}') # ã
...etc
方法2:
output.gsub!(/a<-"|a<-^|a<-~|etc/) {|match| convert_symbol(match)}
def convert_symbol(input)
case match
when 'a<-"'
'\\"{a}' # ä
when "a<-^"
'\\^{a}' # â
when "a<-~"
'\\~{a}' # ã
when 'etc'
'\\LaTeX...etc'
end
end
爲什麼不在兩個文件上進行基準測試並查看哪個更快? –
是的,這是最好的建議。 Sooo ...我在我的兩種方法和Mori's上做了基準測試,結果發現它們的速度幾乎相同。這實際上有點令人驚訝。我多次嘗試使用多個示例輸入來確保。 所以,這只是一個最容易閱讀和維護的問題... – Huliax