顺时针旋转数组中的“旋转”值

时间:2018-05-17 05:32:07

标签: c# arrays loops

首先感谢你花时间看我的问题。

我有一个字母的csv文件,我需要获取数组的最后一个字母并将其移至开头,同时“推送”其他字母

E.G。

- Source-- A,B,C,d,[E]

- Rotated-- E,A,B,C,d

            for (var i = 0; i < Array.Length - 1; i++)
            {
                temp = Array[Array.Length];
                Array[Array.Length] = Array[Array.Length - 1];
                Array[i + 1] = Array[i];
                Array[i] = temp;

            }

为此,我知道并非所有角色都会受到影响,但我不能想到一个循环来移动所有值

3 个答案:

答案 0 :(得分:2)

使用Copy方法:

int last = arr[arr.Length - 1];
Array.Copy(arr, 0, arr, 1, arr.Length - 1);
arr[0] = last;

答案 1 :(得分:1)

您可以使用模%运算符将数字向右移动:

int[] arr = { 1, 2, 3, 4, 5 };
int[] newArr = new int[arr.Length];
for (int i = 0; i < arr.Length; i++)
{
    newArr[(i + 1) % newArr.Length] = arr[i];
}

newArr = {5,1,2,3,4}

<强> DEMO HERE

修改

或者您可以创建一个方法来移动初始数组中的数字,而无需创建新数组。方法rightShiftArray有两个参数,初始数组arr和您想要执行的移位数(shift):

public void rightShiftArray(ref int[] arr, int shift)
{
    for (int i = 0; i < shift; i++)
    {
        int temp;
        for (int j = 0; j < arr.Length - 1; j++)
        {
            temp = arr[j];
            arr[j] = arr[arr.Length - 1];
            arr[arr.Length - 1] = temp;
        }
    }
}

例如:

int[] arr = { 1, 2, 3, 4, 5 };

rightShiftArray(ref arr, 2);

上面的代码将初始数组arr中的数字向右移动两次,并为您提供以下输出:

arr = {4,5,1,2,3};

<强> DEMO HERE

答案 2 :(得分:0)

如果您不想分配新数组,可以使用以下代码:

newValue = Array[Array.Length-1];
for (var i = 0; i < Array.Length; i++)
{
  temp = Array[i];
  Array[i] = newValue;
  newValue = temp;
}