Arrays 选择有条件的按列或按行迭代

Arrays 选择有条件的按列或按行迭代,arrays,algorithm,loops,conditional-statements,iteration,Arrays,Algorithm,Loops,Conditional Statements,Iteration,我想迭代数组,但我想选择迭代是按列还是按行。换句话说,我想在运行时定义每次,rows或cols是否根据条件转到外部循环。虚拟实现当然是: if cond: for rows: for cols: ar[rows][cols]; elif !cond: for cols: for rows: ar[rows][cols]; 现在,是否有一种压缩的方式来表达上述实现 不幸的是,检查所有案例(我的数组是4

我想迭代数组,但我想选择迭代是按列还是按行。换句话说,我想在运行时定义每次,
rows
cols
是否根据条件转到外部循环。虚拟实现当然是:

if cond:
    for rows:
        for cols:
            ar[rows][cols];
elif !cond:
    for cols:
        for rows:
            ar[rows][cols];
现在,是否有一种压缩的方式来表达上述实现

不幸的是,检查所有案例(我的数组是4维的,所以我有16个案例)并不是最好的方法


那么,有没有任何算法方法可以将这些循环压缩成一个循环?

如果你小心的话,相同类型的静态分配数组可以被视为一维数组-在这种情况下,你可以计算其中的第n个偏移量(可能使用一个新函数),并在这些索引上迭代,而不是通过I,J,K,第L位成员

或者,如果您有一种不分配静态数组的语言,或者由于某种原因不能使用静态数组(完全动态类型系统?),那么您可以将起始指针放入一个新数组中,并在该数组上迭代(这很便宜,因为在您的情况下,它只有4个成员),使用每个作为起始点

您可能会发现,您需要以不同的顺序从第二个阵列创建一个逻辑视图到第一个阵列

在这两种情况下,您可能希望使用modulo
%
运算符进行换行,这将允许您在计算围绕数组长度的偏移量时将子索引添加到一起