数组中的最后一个数字成为第一个

时间:2019-02-23 21:41:51

标签: c# arrays .net list

我知道这很容易,但是我不知道该怎么做。

 1 23 29 18 43 20 5 

 5 1 23 29 18 43 20 

我认为我们应该使用for循环:

for (int i = 0; i < numbers.Count - 1; i++)
{

}

但是我不知道该怎么做。像数字[i] =数字[i-1]之类的东西,但是它不起作用。我认为有些错过的支票。

5 个答案:

答案 0 :(得分:6)

想到的最直接的方法是反向循环。

int[] numbers = { 1, 23, 29, 18, 43, 20, 5};
int lastVal = numbers[numbers.Length - 1];
for (int i = numbers.Length -1; i > 0; i--)
    numbers[i] = numbers[i-1];
numbers[0] = lastVal;

仅从末尾循环一次(保存完最后一个值之后),然后将这些值“向上”移动,最后将第一个值替换为最后一个

答案 1 :(得分:3)

这里是一个班轮:

var numbers = new[] {1, 23, 29, 18, 43, 20, 5};
numbers = new[] {numbers.Last()}.Concat(numbers.Take(numbers.Length - 1)).ToArray();

这将创建一个包含最后一个元素的新数组,然后将其与除最后一个元素之外的原始数组连接起来。

答案 2 :(得分:1)

您想要做的是制作另一个与原始数组大小相同的数组,然后分配最后一个元素并循环遍历该数组,直到上一个到最后一个元素。

类似这样的东西:

int[] original = {1, 23, 29, 18, 43, 20, 5};
int[] altered = new int[original.length];

altered[0] = original[original.length - 1];
for (int i = 1; i < original.length - 1; i++)
{
    altered[i] = original[i - 1];
}

答案 3 :(得分:1)

您可以在案子上向左旋转桌子六个位置,并创建所需的新桌子

 int[] myArray = new int[] { 1, 23, 29, 18, 43, 20, 5 };
 var newArray = LeftRotationByD(myArray, 6);

,您的旋转功能将是:

 private static int[] LeftRotationByD(int[] a, int k)
        {
            int[] b = new int[a.Length];

            int index;
            int length = a.Length;
            int place;

            for (int i = 0; i < length; i++)
            {
                index = i - k;
                place = length + index;

                if (index >= 0) b[index] = a[i];
                else b[place] = a[i];
            }
            return b;
        }

答案 4 :(得分:0)

您可以使用此方法向右移动:

void ShiftRight(int[] array, int count)
{
    var clone = (int[])array.Clone();
    for (var i = 0; i < array.Length; i++)
        array[(i + count) % array.Length] = clone[i];
}

并以这种方式使用它:

var a = new int[] { 1, 2, 3, 4 };
ShiftRight(a, 1);