private static void Convert2Dto1D <T>(T[,] sourceArr, out T[] targetArr, ArrayDirection direction) { int len0 = sourceArr.GetLength(0); int len1 = sourceArr.GetLength(1); int totalLen = len0 * len1; targetArr = new T[totalLen]; int idx = 0; if (direction == ArrayDirection.Horizontal) { for (int y = 0; y < len1; y++) { for (int x = 0; x < len0; x++) { targetArr[idx++] = sourceArr[x, y]; } } } else { for (int x = 0; x < len0; x++) { for (int y = 0; y < len1; y++) { targetArr[idx++] = sourceArr[x, y]; } } } }
private static void Convert1Dto2D <T>(T[] sourceArr, int xLen, int yLen, out T[,] targetArr, ArrayDirection direction) { targetArr = new T[xLen, yLen]; int curIdx = 0; if (direction == ArrayDirection.Horizontal) { for (int y = 0; y < yLen; y++) { for (int x = 0; x < xLen; x++) { targetArr[x, y] = sourceArr[curIdx++]; } } } else { for (int x = 0; x < xLen; x++) { for (int y = 0; y < yLen; y++) { targetArr[x, y] = sourceArr[curIdx++]; } } } }