Last active
February 7, 2018 21:35
-
-
Save TinkerWorX/fe19a9e108b537f453d91e3711288968 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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; | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Seems to work fine :)