我需要扫描一个矩形的二维数组。通常,我会在y和x上使用嵌套循环。但是,我还想以旋转和/或镜像方式扫描阵列。天真地,这将导致2 * 4 = 8个嵌套循环,我想避免。
我如何优雅地实施所有8个案例?
这就是我提出的:
int sx = 3;
int sy = 2;
var a = new int [,] {
{ 1, 2, 3 },
{ 4, 5, 6 },
};
for (int order = 0; order < 8; order++) {
var mirrorX = (order & 1) != 0;
var mirrorY = (order & 2) != 0;
var mirrorDiag = (order & 4) != 0;
for (int i = 0; i < sx * sy; i++) {
int x = mirrorDiag ? i % sx : i / sy;
int y = mirrorDiag ? i / sx : i % sy;
if (mirrorX) {
x = sx - x - 1;
}
if (mirrorY) {
y = sy - y - 1;
}
Console.Write (a [y, x]);
}
Console.WriteLine ();
}
142536
362514个
415263个
635241个
123456个
321654个
456123个
654321
答案 0 :(得分:0)
我建议您将此任务分为两部分:
Deque
。在您的示例中,您将拥有2个水平队列和3个垂直队列。