You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何优雅实现二维数组的8种镜像与旋转遍历方式?

优雅实现矩形数组的8种遍历场景(镜像+旋转组合)

当需要遍历矩形二维数组并支持X轴镜像、Y轴镜像、对角线旋转的所有组合(共2×2×2=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++) {
        // 根据对角线旋转标记,切换x/y的计算逻辑
        int x = mirrorDiag ? i % sx : i / sy;
        int y = mirrorDiag ? i / sx : i % sy;
        
        // 应用X轴镜像变换
        if (mirrorX) {
            x = sx - x - 1;
        }
        // 应用Y轴镜像变换
        if (mirrorY) {
            y = sy - y - 1;
        }

        Console.Write(a[y, x]);
    }
    Console.WriteLine();
}

输出结果

142536

362514

415263

635241

123456

321654

456123

654321

思路说明

  • 用order变量的3个二进制位分别对应X轴镜像(第0位)、Y轴镜像(第1位)、对角线旋转(第2位),通过位运算快速判断当前需要启用哪些变换
  • 把二维遍历转换成一维索引遍历,再根据变换规则将一维索引映射回二维坐标,避免了嵌套循环的重复编写
  • 所有变换逻辑都集中在坐标计算环节,核心遍历逻辑只需要写一次,后期调整变换规则也更方便

内容的提问来源于stack exchange,提问作者mafu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 06:40:27