文字列の3番目の文字を取得したいとします。
string s = "cats";
オンラインで使用するほとんどの例を見ると、s[2]を使用して値を取得することの違いは何ですか。
char[] c = s.ToCharArray();
char x = c[2];
"cats"[2]
"cats".ToCharArray()
このs[2]
メソッドは、単にその位置にある文字を検索して返します。
このメソッドは、新しいをs.ToCharArray();
割り当ててから、配列で検索します。char[]
c[2]
1文字だけが必要な場合は、メソッドが無駄になるため、このs[2]
メソッドを使用してください。ToCharArray()
文字列内のすべての文字が必要な場合char[]
、ToCharArray()
メソッドはよりクリーンでおそらく高速です(ベンチマークを行っていないので、それに固執しないでください)。
編集:
MS.NETとMonoの両方の実装はstring.ToCharArray()
、内部char
と複製を固定char[]
し、ポインターを操作する安全でないコードを使用します。これは、すべての文字に対してインデクサーを呼び出すよりも間違いなく高速であり、列挙子を使用してすべての文字を反復処理するよりもおそらく高速です。さらに、特にパラメーターとして使用される場合は、非常にクリーンであることがわかります。
DoSomethingWithCharArray(s.ToCharArray());
vs
int i = 0;
char[] arr = new char[s.Length];
foreach (char c in s)
{
arr[i] = c;
i++;
}
DoSomethingWithCharArray(arr);
また
char[] arr = new char[s.Length];
for (int i = 0; i < s.Length; i++)
{
arr[i] = s[i];
}
DoSeomthingWithCharArray(arr);
違いは、文字配列を不必要に作成していることです。s[2]を使用します。
文字を読んでいるだけの場合、違いはメモリフットプリントがわずかに大きいことだけです。ただし、一部の文字を変更して元の文字列を保持したい場合は、利用するToCharArray
と非常に便利です。