子串

2011-06-21 45 views
2

問:子串

我想根據像-一些跡象讓子字符串。

EX:

如果我有字符串是這樣的:

saturday-sa-0- 

,我想獲得:

saturday 

sa 

0 

我搜索並發現了以下方法:

string substring = name.Split('-')[i]; 

我的代碼塊示例:

foreach (string name in q) 
       { 
        for (int i = 0; i < 3; i++) 
        { 
         string substring = name.Split('-')[i]; 
        } 
       } 

但我讀到的性能缺點的評論時,我有一個很長的字符串.. 我的問題是:有沒有辦法根據具體sign並不會影響子串嚴重的性能代碼?

+1

對我來說看起來很好 – V4Vendetta

+1

您是否期待過性能問題,您可能從來沒有?string.Split()將是要走的路,除非您有一個特定的性能問題,因爲使用string.split ); –

回答

2

首先,您應該只執行一次拆分操作。即,而不是

some loop { 
    ... 
    string substring = name.Split('-')[i]; 
    ... 
} 

使用

string[] substrings = name.Split('-'); 
some loop { 
    ... 
    string substring = substrings[i]; 
    ... 
} 

其次,不用擔心Strint.Split的表現太多,除非

  • 你有一個真正的,可衡量的業績問題,
  • 你知道String.Split是罪魁禍首。

例如,如果您有一些數據庫操作需要1秒,則後續分割操作是否需要0.001或0.002秒無關緊要。


編輯:關於您的評論的代碼:您可以重構

foreach (string name in q) { 
    for (int i = 0; i < 3; i++) { 
     string substring = name.Split('-')[i]; 
     // do something with substring 
    } 
} 

foreach (string name in q) { 
    string[] substrings = name.Split('-'); 
    for (int i = 0; i < 3; i++) { 
     string substring = substrings[i]; 
     // do something with substring 
    } 
} 
+0

我的這樣的代碼塊: –

+0

'的foreach(q中字符串名稱) { 對(INT I = 0; I <3;我++){ 字符串的子串= name.Split( ' - ')[I]; } }' –

+0

如何重新分解這段代碼.. –

1

我想說這取決於您的數據。但是,你不應該做反覆...

string substring = name.Split('-')[i]; 

...因爲這將您的字符串每次分成幾部分,你需要訪問只是部分之一。相反,緩存分割的結果是這樣的...

string[] parts = name.Split('-'); 

...然後使用...

string substring = parts[i]; 

...訪問的各個部分。

+0

什麼是字符串substring = name.Split(' - ')[i];和string [] parts = name.Split(' - ')[i];根據你的答案? –

+1

哇,錯字,對不起。固定。 – takrl

3

將字符串分割爲O(N),不能多也不能少,這是String.Split實際複雜所以,即使你自己寫的程序,就不能得到真正的快。也許它可以稍快一點。無論如何,首先要確保String.Split的性能確實讓你不滿意。

是的,如果你在LOOP中反覆分裂,那麼這將是一個性能問題。您必須首先將其拆分,然後遍歷數組 - 請參閱其他答案

2

的問題與分裂,是如果它是在使用。如果您需要在字符上拆分字符串,然後拆分字符串。正則表達式是下一個最常用的方法,但帶有自己的設置或性能問題。如果你真的需要讓你的腳印小掃描字符串,並做好你的處理是你最好的選擇,但是這也充滿了危險,因爲.net字符串是不可變的,你可能會遇到同樣的問題,你遇到與分裂。所以我猜想它的長和短是使用拆分,如果這不符合您的需要重新評估。