0


0

誰かが文字列の途中からいくつかの選択された文字を切り取るための(時間的に)効率的な方法を考えることができますか?

私が思い付いたのは最高でした:

public static string Trim(この文字列の単語、IEnumerable selectedChars){文字列の結果=単語; foreach(selectedCharsのchar c)result = result.Replace(c.ToString()、 "");結果を返します。 }

しかし、まだ遅すぎます。

2 Answer


6


2つの選択肢が思い浮かびます。

  • StringBuilderを使用する

  • 正規表現を使う

これが `+ StringBuilder +`バージョンです:

public static string Trim(this string word, IEnumerable selectedChars)
{
    // The best form for this will depend largely on the size of selectedChars
    // If you can change how you call the method, there are optimisations you
    // could do here
    HashSet charSet = new HashSet(selectedChars);

    // Give enough capacity for the whole word. Could be too much,
    // but definitely won't be too little
    StringBuilder builder = new StringBuilder(word.Length);

    foreach (char c in word)
    {
        if (!charSet.Contains(c))
        {
            builder.Append(c);
        }
    }
    return builder.ToString();
}

あなたがトリミングしたい文字の_固定_セットがあり、正規表現_once_を構築することができるなら、正規表現オプションは非常に効率的です。

何かのようなもの:

// Put this statically somewhere
Regex unwantedChars = new Regex("[def]", RegexOptions.Compiled);

// Then do this every time you need to use it:
word = unwantedChars.Replace(word, "");


0


代わりにStringBuilderを使用して文字列を置き換えないでください…​ http://blogs.msdn.com/charlie/archive/2006/10/11/Optimizing-C_2300_-String-Performance.aspxを参照してください。