次の文字列があるとします
string data= "/temp string";
最初の文字を削除したい場合は、次/
のような多くの方法で実行できます。
data.Remove(0,1);
data.TrimStart('/');
data.Substring(1);
しかし、実際には、どれが最高のアルゴリズムを持っていて、それをより高速に実行しているのかわかりません..
最高のものはありますか、それともすべて同じですか?
次の文字列があるとします
string data= "/temp string";
最初の文字を削除したい場合は、次/
のような多くの方法で実行できます。
data.Remove(0,1);
data.TrimStart('/');
data.Substring(1);
しかし、実際には、どれが最高のアルゴリズムを持っていて、それをより高速に実行しているのかわかりません..
最高のものはありますか、それともすべて同じですか?
2 番目のオプションは、実際には他のオプションと同じではありません。文字列が「///foo」の場合、「//foo」ではなく「foo」になります。
最初のオプションを理解するには、3 番目のオプションよりも少し作業が必要です。私は、このSubstring
オプションが最も一般的で読みやすいと考えています。
(明らかに、それらのそれぞれを個別のステートメントとして使用しても、何の役にも立ちません。結果を変数 (場合によってはdata
それ自体) に代入する必要があります。)
実際に問題が発生しない限り、ここではパフォーマンスを考慮しません。その場合、唯一の方法はテスト ケースを作成することです。その後、オプションごとにそれらのテスト ケースを実行するだけで簡単に実行できます。結果を比較します。常に元の入力の単一のチャンクから文字列を作成することになるのに対し、少なくとも開始チャンクと終了チャンクを接着する必要があるSubstring
ため、ここではおそらく最速であると予想されます。Substring
Remove
どちらも文字列の固定サイズの部分を丸呑みするRemove
のSubstring
に対しTrimStart
、左からスキャンして各文字のテストを行い、その後、他の2つの方法。しかし、真剣に、これは髪を分割しています。
本当に気にするなら、プロファイリングできます。多くの繰り返しのループを書き、何が起こるか見てみましょう。ただし、これがアプリケーションのボトルネックではない可能性があり、TrimStart が最も意味的に正しいと思われます。最適化する前に、読みやすいコードを書くように努めてください。