Skip to content

Instantly share code, notes, and snippets.

@TinkerWorX
Last active February 7, 2018 21:35
Show Gist options
  • Save TinkerWorX/fe19a9e108b537f453d91e3711288968 to your computer and use it in GitHub Desktop.
Save TinkerWorX/fe19a9e108b537f453d91e3711288968 to your computer and use it in GitHub Desktop.
public static class ArrayUtilities
{
public static void Shift<T>(T[,] array, int x, int y)
{
ShiftHorizontal(array, x);
ShiftVertical(array, y);
}
public static void ShiftHorizontal<T>(T[,] array, int x)
{
while (x != 0)
{
var a = Math.Sign(x);
switch (a)
{
case -1:
ShiftLeft(array);
break;
case 1:
ShiftRight(array);
break;
}
x -= a;
}
}
public static void ShiftVertical<T>(T[,] array, int y)
{
while (y != 0)
{
var a = Math.Sign(y);
switch (a)
{
case -1:
ShiftUp(array);
break;
case 1:
ShiftDown(array);
break;
}
y -= a;
}
}
public static void ShiftLeft<T>(T[,] array)
{
for (var y = 0; y < array.GetLength(1); y++)
{
var end = array[0, y];
for (var x = 0; x < array.GetLength(0) - 1; x++)
{
array[x, y] = array[x + 1, y];
}
array[array.GetLength(0) - 1, y] = end;
}
}
public static void ShiftRight<T>(T[,] array)
{
for (var y = 0; y < array.GetLength(1); y++)
{
var end = array[array.GetLength(0) - 1, y];
for (var x = array.GetLength(0) - 1; x >= 1; x--)
{
array[x, y] = array[x - 1, y];
}
array[0, y] = end;
}
}
public static void ShiftUp<T>(T[,] array)
{
for (var x = 0; x < array.GetLength(0); x++)
{
var end = array[x, 0];
for (var y = 0; y < array.GetLength(1) - 1; y++)
{
array[x, y] = array[x, y + 1];
}
array[x, array.GetLength(1) - 1] = end;
}
}
public static void ShiftDown<T>(T[,] array)
{
for (var x = 0; x < array.GetLength(0); x++)
{
var end = array[x, array.GetLength(1) - 1];
for (var y = array.GetLength(1) - 1; y >= 1; y--)
{
array[x, y] = array[x, y - 1];
}
array[x, 0] = end;
}
}
}
@ronaldtmunodawafa
Copy link

Seems to work fine :)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment