我正在編寫一個搜索應用程序,用於標記大型文本語料庫。String.Split效率問題
文本解析器需要從文本中刪除任何胡言亂語(即[^ A-ZA-Z0-9])
我有2個想法在我的腦海如何做到這一點:
1)將文本放在一個字符串中,使用String.tocharArray將其轉換爲charArray,然後通過循環運行char字符 - > while(位置< string.length) 這樣做可以在整個字符串數組中標記整個字符串數組文本。
2)使用string.replace去除所有非數字/ alpha,然後用一些分隔符對string.split進行去除,這意味着我必須對整個字符串運行兩次。 一次刪除不好的字符,然後再分裂它。我認爲,既然#1和#2一樣,但是在O(n)中會更快,但是在測試兩者之後,#2更快(方式!)。
我走得更遠了,並使用red-gate .net反射器查看了String.Strip背後的代碼。 它像#1一樣通過char運行非託管字符,但仍然快得多。
我不知道爲什麼#2比#1快。
任何想法?
正如所描述的,我認爲方法1和方法2都是O(n) – Greg 2010-11-08 22:26:07
這是毫無意義的猜測,直到你張貼代碼,每個人都可以嘗試。對於我們所知道的,你真的在#1上瘋狂。 String.Replace()進行了大量優化,因爲它是O(nm)算法,但仍需要運行它k次。你的發現沒有多大意義。 – 2010-11-08 22:35:57