Joe Duffy's Blogは、string.Substring
を使用することのほうがstring.Split
より効率的です。String.SplitよりもString.Substringの方が効率的ですか?
Substring
というメソッドでは、新しい文字列が割り当てられないのか、不要な割り当てが行われないので効率が良いのか分かりません。それがより効率的であることを説明し、例を示すことができますか?
私は彼の最初の例として、配列を作成し、配列内の各文字列を処理することを理解しています。
string str = ...;
string[] substrs = str.Split(',');
foreach (string subtr in substrs) {
Process(substr);
}
方法以下れるより効率的な
string str = ...;
int lastIndex = 0;
int commaIndex;
while ((commaIndex = str.IndexOf(',', commaIndex)) != -1) {
Process(substr, lastIndex, commaIndex);
lastIndex = commaIndex + 1;
私は何を参照して、文字列を処理し、その後、コンマのインデックスを見つけるために、String.IndexOf
を使用しています。私は彼が処理中にデータを抽出するためにString.Substring
を使うつもりだと思う。以下のコメントの1つは、彼が文字ごとにそれを引っ張っているかもしれないことを示唆している。おそらくcharの配列を構築する次のコンマにヒットするまで、彼は文字を引っ張っているだろうか?
はいsting.Index ofはカンマのインデックスを検索するために使用されますが、仮のプロセスメソッドの内部では、これらのインデックス内のデータを抽出するために部分文字列を作成する必要があります。右? –
私は訂正されました - 例は本当に混乱しています – BrokenGlass
"String.SplitとString.Substringのようにそこに潜んでいる地雷APIがあります"と言うと、 'Substring'は効率的ではないと思います。 "文字列はインデクサーを持っているので、型セーフなので、少なくとも部分的にはバッファオーバーランにつながることはない"とは、文字単位で文字にアクセスすることを意味します。 'Substring'を使って。 – Blorgbeard