Я не уверен, почему у вас есть все развороты, если честно.Как насчет этого:
int[] Rotate(int[] ar,int k)
{
if (k <= 0 || k > ar.Length - 1)
return ar;
return ar.Skip(k) // Start with the last elements
.Concat(ar.Take(k)) // Then the first elements
.ToArray(); // Then make it an array
}
Вот короткая, но полная программа, чтобы продемонстрировать это:
using System;
using System.Linq;
class Test
{
static int[] Rotate(int[] ar,int k)
{
if (k <= 0 || k > ar.Length - 1)
return ar;
return ar.Skip(k) // Start with the last elements
.Concat(ar.Take(k)) // Then the first elements
.ToArray(); // Then make it an array
}
static void Main()
{
int[] values = { 1, 2, 3, 4, 5 };
int[] rotated = Rotate(values, 3);
Console.WriteLine(string.Join(", ", rotated));
}
}
Вывод: 4, 5, 1, 2, 3
РЕДАКТИРОВАТЬЯ только что заметил одно существенное различие между моим кодом и вашим исходным кодом: ваш изменяет исходный массив - мой возвращает массив новый с повернутыми значениями.Как и ваш код LINQ, но это означает, что если бы вы тестировали мой код с чем-то, что смотрело только на исходный массив, вы бы не увидели поворота.
LINQ в целом предназначен для такой работы - этоодобряет возврат новой последовательности вместо изменения существующей.