1

この方法の代替手段は何ですか

 tmp = c[0];
c[0] = c[1];
c[1] = c[2];
c[2] = c[3];
c[3] = tmp;

4 つの要素を持つ char 配列を左回転するには

4

5 に答える 5

3

ジェネリックスを使用し、その場でローテーションします(提案してくれたJon Skeetに感謝します):

static void Rotate<T>(T[] source)
{
    var temp = source[0];
    Array.Copy(source, 1, source, 0, source.Length - 1);
    source[source.Length - 1] = temp;
}

これらは、少なくとも2つの長さの任意の配列、および任意の配列で機能するはずです。

パフォーマンスが重要で、アレイが常に小さい場合は、次を使用します。

static void Rotate<T>(T[] source)
{
    var temp = source[0];
    for (int i = 0; i < source.Length - 1; i++)
        source[i] = source[i + 1];
    source[source.Length - 1] = temp;
}

最初の方法は大きな配列で最速ですが、4つのアイテムの場合、これは例の方法とほぼ同じ速度です。

于 2012-06-02T16:08:57.967 に答える
1

配列をローテーションする代わりに、配列にアクセスするときにインデックスをローテーションします。つまり、仮想リングを作成します。

int origin = someValue;
int x = c[(i + origin) % c.Length];
于 2012-06-02T16:19:14.220 に答える
0

シングルステップで仕事をしてください。

Using System.Linq;

 int[]  ar = { 1,2,3,4,5};
 int k = 1; //
 int[] ar1=  ar.Skip(k)            // Start with the last elements
             .Concat(ar.Take(k)) // Then the first elements
             .ToArray();

出力-2、3、4、5、1

于 2012-06-02T16:10:06.907 に答える
0

より効率的な方法を求めているのか、それとも簡単に入力する方法を求めているのかはわかりませんが、もっと簡単な方法が必要だと思って答えてみます

だから試してみてください:

int temp = c[0]
for(int i = 0; i < c.count; i++)
{
    if (i == (c.count - 1))
    {
        c[i] = temp;
        break;
    }
    c[i] = c[i + 1];
}
于 2012-06-02T16:10:48.527 に答える