這已被問到幾種不同的方式,但我正在與另一名開發人員討論「我的方式」與「你的方式」。語言是C#。解析C中分隔字符串的最有效的方法#
我想解析一個管道分隔字符串,其中每個塊的前2個字符是我的標記。
規則。不是我的規則,而是我已經給予並且必須遵守的規則。 我無法更改字符串的格式。 這個函數可能會被調用很多次,所以效率是關鍵。 我需要保持簡單。 我正在查找的輸入字符串和標籤可能會在運行時更改。
實施例的輸入字符串:AOVALUE1 | ABVALUE2 | ACVALUE3 | ADVALUE4 實施例標籤我可能需要值:我分裂串到每個函數被調用時基於定界符和循環通過該陣列的陣列AB
。然後,我查看了前2個字符,並將值減去前2個字符。
「其他人」的方式是採取字符串,並使用IndexOf和SubString的組合來查找我所尋找的字段的起點和終點。然後再次使用SubString來拉出值減去前2個字符。所以他會說IndexOf(「| AB」)查找字符串中的下一個管道。這將是開始和結束。然後SubString出來。
現在我應該認爲IndexOf和SubString會每次在char by char level處解析字符串,所以這比使用大塊和讀取字符串減去前2個字符的效率要低。還是有另一種方式,比我們兩個人提出的更好?
如果輸入字符串不經常更改,然後您可以創建一個字典,您可以一次解析字符串,併爲每個標記/值對執行Dictionary.Add(tag,value)。你也可以做一些延遲加載,在那裏你解析字符串的一部分,直到你找到你想要的值(同時把你發現的所有東西加到字典中),然後在下一次搜索字典。並繼續解析,如果你沒有找到它。 –
想過這個。輸入字符串和標籤幾乎可以每次都改變。我提出了使用集合的各種方法,但建議使用某種類型的解析。 – SpaceMonkey