旋转char数组

时间:2012-06-02 16:04:29

标签: c# arrays rotation

这种方法有哪些替代方法

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

向左旋转一个包含4个元素的char数组

5 个答案:

答案 0 :(得分:2)

使用泛型并在适当位置旋转(感谢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项,这个方法几乎与示例方法一样快。

答案 1 :(得分:1)

旋转数组的另一种方法是在访问数组时旋转索引,即创建虚拟环

int origin = someValue;
int x = c[(i + origin) % c.Length];

答案 2 :(得分: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

答案 3 :(得分: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];
}

答案 4 :(得分:0)

在红宝石中,旋转阵列可以一行完成。

def array_rotate(arr)
    i, j = arr.length - 1, 0
    arr[j],arr[i], i, j = arr[i], arr[j], i - 1, j + 1 while(j<arr.length/2)
    puts "#{arr}"
end