【问题标题】:Choose conditionally column-wise or row-wise iteration有条件地选择逐列或逐行迭代
【发布时间】:2021-07-07 17:05:58
【问题描述】:

我想迭代一个数组,但我想选择迭代是按列还是按行。换句话说,我想在运行时定义每次 rowscols 是否进入外循环,反对条件。虚拟实现当然是:

if cond:
    for rows:
        for cols:
            ar[rows][cols];
elif !cond:
    for cols:
        for rows:
            ar[rows][cols];

现在,有没有一种压缩方式来表达上述实现?

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

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

【问题讨论】:

    标签: arrays algorithm loops conditional-statements iteration


    【解决方案1】:

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

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

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

    在这两种情况下,您可能都希望使用模 % 运算符进行换行,这将允许您在计算环绕数组长度的偏移量时继续将子索引相加。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-08-27
      • 1970-01-01
      • 1970-01-01
      • 2017-04-28
      • 2021-01-12
      • 2011-02-16
      • 1970-01-01
      • 2011-01-18
      相关资源
      最近更新 更多