2010-07-11 42 views
131

假設我們有以下字符串最快的方法,以消除第一個字符的字符串

string data= "/temp string"; 

如果我們想了很多辦法,如除去第一個字符/我們可以這樣做:

data.Remove(0,1); 
data.TrimStart('/'); 
data.Substring(1); 

但是..真的我不知道哪一個有最好的算法,並做得更快..
有沒有一個是最好的或所有的都是一樣的?

+0

無論如何你想刪除第一個字符還是你需要檢查這個字符確實是'/'? – SRKX 2010-07-11 06:43:40

+2

'TrimStart'不會刪除第一個字符,它會從頭開始刪除'n'個字符。 Substring是最快的。 – 2010-07-11 06:44:17

+0

我只需要刪除任何第一個字符 – 2010-07-11 06:55:03

回答

101

第二個選項與其他選項確實不一樣 - 如果字符串是「/// foo」,它將變成「foo」而不是「// foo」。

第一個選項比第三個選項需要更多的工作來理解 - 我會將Substring選項視爲最常見和可讀的選項。

(顯然他們每個人作爲個人陳述不會做任何有用的事情 - 你需要的結果分配給一個變量,可能data本身)。

我不會把性能考慮這裏除非它真的成爲你的問題 - 在這種情況下,你知道的唯一方法就是擁有測試用例,然後爲每個選項運行這些測試用例並比較結果很容易。我希望Substring可能是這裏最快的,因爲Substring總是最終從原始輸入的一個塊創建一個字符串,而Remove必須至少潛在粘合起始塊和結束塊。

+26

我通過電話,現在檢查每一個9000多,我去了以下結果: 刪除:06.63 - TrimStart:04.71 - 字符串:03.09 所以從結果子是最好的 – 2010-07-11 07:25:56

+2

請記住,當你正在測試性能這樣,你就會受到CPU緩存的影響,所以你需要在隨機字符串上做到這一點,你預先填充一個數組(列表),並隨機選擇該數組(列表)的元素。 – ajeh 2016-09-09 19:51:05

5

如果你真的關心,你可以分析它。寫一個循環的許多迭代,看看會發生什麼。然而,有可能這不是你應用程序中的瓶頸,而TrimStart似乎是最符合語義的。努力在優化之前易於編寫代碼。

+6

'TrimStart'是最不正確的,因爲'「// temp string」.TrimStart('/')'不會*刪除第一個''/''。 – 2010-07-11 06:45:10

+0

這個函數名字很差。我不是C#的人。 – 2010-07-11 07:20:58

+0

@StefanKendall:看標籤 – 2014-12-29 12:12:47

8

我猜RemoveSubstring將並列第一,因爲它們都發出聲音了串的固定大小的部分,而TrimStart確實從左側與每個字符的測試的掃描,然後必須執行與其他兩種方法完全相同的工作。不過,嚴重的是,這是分裂的頭髮。

+1

實際上,'Substring'比'Remove'快,因爲'Remove'調用'Substring'。 – 2010-07-11 06:45:46

+0

@Jaroslav:這是不正確的。 Substring和Remove都依賴於私有方法FillSubstring。 – 2010-07-11 06:54:02

+0

沒有驗證它,但它聽起來似乎合理:'字符串刪除(此字符串源,int從,int到){返回source.SubString(0,from)+ source.SubString(to); }' – Dykam 2010-07-11 06:56:45

相關問題