この方法の代替手段は何ですか
tmp = c[0];
c[0] = c[1];
c[1] = c[2];
c[2] = c[3];
c[3] = tmp;
4 つの要素を持つ char 配列を左回転するには
ジェネリックスを使用し、その場でローテーションします(提案してくれた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つのアイテムの場合、これは例の方法とほぼ同じ速度です。
配列をローテーションする代わりに、配列にアクセスするときにインデックスをローテーションします。つまり、仮想リングを作成します。
int origin = someValue;
int x = c[(i + origin) % c.Length];
シングルステップで仕事をしてください。
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
より効率的な方法を求めているのか、それとも簡単に入力する方法を求めているのかはわかりませんが、もっと簡単な方法が必要だと思って答えてみます
だから試してみてください:
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];
}