2

私はスピードを目指しています、超高速でなければなりません。

        string s = something;
        for (int j = 0; j < s.Length; j++)
        {
            if (s[j] == 'ь')
                if(s.Length>(j+1))
                    if(s[j+1] != 'о')
                        s[j] = 'ъ';

エラー「プロパティまたはインデクサー 'string.this[int]' を割り当てることができません -- 読み取り専用です」というエラーが表示されます

最速の方法はどうすればよいですか?

4

3 に答える 3

3

少なくとも 2 つのオプションがあります。

  • StringBuilder を使用して、前の文字を追跡します。
  • 必要に応じて、正規表現"ь(?!о)"または単純な文字列置換を使用でき"ьо"ます(質問は自己矛盾しているようです)。

StringBuilder アプローチと正規表現のパフォーマンスをテストしましたが、違いはほとんどなく、最大で 2 倍です。

1 秒あたりのメソッド反復回数
StringBuilder 153480.094
正規表現 (未コンパイル) 90021.978
正規表現 (コンパイル済み) 136355.787
文字列。1427605.174 に置き換えます

パフォーマンスが重要な場合は、最速のアプローチについて結論を出す前に、いくつかのパフォーマンス測定を行うことを強くお勧めします.

于 2011-01-19T20:47:14.050 に答える
3

早道?を使用しStringBuilderます。

最速の方法?a の代わりに常に achar*と aを渡して、バッファをその場で変更できるようにしますが、オブジェクトを変更しないようにしてください。lengthstringstring

于 2011-01-19T20:47:43.863 に答える
2

.Net の文字列は読み取り専用です。を使用できますStringBuilder

于 2011-01-19T20:47:42.960 に答える