250

次の文字列があるとします

string data= "/temp string";

最初の文字を削除したい場合は、次/のような多くの方法で実行できます。

data.Remove(0,1);
data.TrimStart('/');
data.Substring(1);

しかし、実際には、どれが最高のアルゴリズムを持っていて、それをより高速に実行しているのかわかりません..
最高のものはありますか、それともすべて同じですか?

4

5 に答える 5

173

2 番目のオプションは、実際には他のオプションと同じではありません。文字列が「///foo」の場合、「//foo」ではなく「foo」になります。

最初のオプションを理解するには、3 番目のオプションよりも少し作業が必要です。私は、このSubstringオプションが最も一般的で読みやすいと考えています。

(明らかに、それらのそれぞれを個別のステートメントとして使用しても、何の役にも立ちません。結果を変数 (場合によってはdataそれ自体) に代入する必要があります。)

実際に問題が発生しない限り、ここではパフォーマンスを考慮しません。その場合、唯一の方法はテスト ケースを作成することです。その後、オプションごとにそれらのテスト ケースを実行するだけで簡単に実行できます。結果を比較します。常に元の入力の単一のチャンクから文字列を作成することになるのに対し、少なくとも開始チャンクと終了チャンクを接着する必要があるSubstringため、ここではおそらく最速であると予想されます。SubstringRemove

于 2010-07-11T06:44:47.210 に答える
10

どちらも文字列の固定サイズの部分を丸呑みするRemoveSubstringに対しTrimStart、左からスキャンして各文字のテストを行い、その後、他の2つの方法。しかし、真剣に、これは髪を分割しています。

于 2010-07-11T06:43:39.713 に答える
5

本当に気にするなら、プロファイリングできます。多くの繰り返しのループを書き、何が起こるか見てみましょう。ただし、これがアプリケーションのボトルネックではない可能性があり、TrimStart が最も意味的に正しいと思われます。最適化する前に、読みやすいコードを書くように努めてください。

于 2010-07-11T06:43:34.673 に答える