Какие есть альтернативы этому методу
tmp = c[0];
c[0] = c[1];
c[1] = c[2];
c[2] = c[3];
c[3] = tmp;
чтобы повернуть влево массив символов с 4 элементами
Какие есть альтернативы этому методу
tmp = c[0];
c[0] = c[1];
c[1] = c[2];
c[2] = c[3];
c[3] = tmp;
чтобы повернуть влево массив символов с 4 элементами
Использование дженериков и вращение на месте (спасибо 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];
Я не уверен, просите ли вы более эффективный метод или более простой способ ввода, но я попытаюсь ответить вам, предполагая, что вы хотите более простой способ
так что попробуйте:
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];
}
Выполняйте работу за один шаг.
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
В ruby вращение массива можно сделать в одну строку.
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