基本的に、「最後の Console.ReadLine() メソッドに入力された内容に "!" が含まれている場合...何かを行う」という if ステートメントを書きたいと思います。
だから、私は方法を持っています:
static void Operations(StringBuilder bleh, int ops, int count, string str)
{
for (int i = 0; i < ops; i++)
{
bleh.Append(Console.ReadLine()); // Potential value of "ops" is > 100,000
if (bleh.ToString().IndexOf("!") != -1)
{
bleh.Replace("!", "");
}
else
{
bleh.Remove(0, 1);
bleh.Replace("^", "");
}
...
すべての readLine() には、「!」+ 入力された文字または単に「^」。「^」が入力された場合、stringbuilder の最初のインデックス文字と「^」が削除されます。もし "!" が入力されている場合は、「!」削除されますが、文字は残ります。
ReadLine() から新しい文字列を追加した後、"!" を検索する必要があるため、私のコードは遅いようです。または、ループの反復ごとに潜在的に巨大な文字列の「^」を削除し、再度検索して削除します。「^」と「!」が入力されたため、インデックス値を使用してそれらを置き換えることができました。
bleh.Replace(counter, 1)
入力された値に応じて stringbuilder のサイズが増減するため、ここでインデックス値を取得するのは少し難しいです。
これは興味深い質問をもたらします: "StringBuilder.Replace("abc", "a") のようなものはどのように行われますか? 10,000 文字の長さの文字列の場合、文字列の先頭から検索して「スクロール」しますか? 「abc」を見つけるには? .Append メソッドは、たとえば「!2」を末尾に置いているため、パフォーマンスが低下します。
パフォーマンスを向上させる簡単な答えはありますか?