2

文字列の3番目の文字を取得したいとします。

string s = "cats";

オンラインで使用するほとんどの例を見ると、s[2]を使用して値を取得することの違いは何ですか。

char[] c = s.ToCharArray();
char x = c[2];
4

4 に答える 4

8
  • 特定のインデックスで文字が必要な場合は、"cats"[2]
  • 文字列全体をchar配列として必要な場合は、"cats".ToCharArray()
于 2013-01-18T21:11:35.687 に答える
4

この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);
于 2013-01-18T21:13:07.003 に答える
3

違いは、文字配列を不必要に作成していることです。s[2]を使用します。

于 2013-01-18T21:12:28.640 に答える
0

文字を読んでいるだけの場合、違いはメモリフットプリントがわずかに大きいことだけです。ただし、一部の文字を変更して元の文字列を保持したい場合は、利用するToCharArrayと非常に便利です。

于 2013-01-18T21:16:17.417 に答える