首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在n维上迭代?

如何在n维上迭代?
EN

Stack Overflow用户
提问于 2012-12-26 19:57:20
回答 5查看 5.4K关注 0票数 10

给定维数和每个数组的大小作为变量,我如何遍历n维数组?

代码语言:javascript
复制
int n;
int size[n];

由于维度的数量不是固定的,所以我不能为每个维度编写嵌套循环。我需要的代码,以与每个维度的数量。

此外,无论实际数据是存储在n维数组中还是包含大行中所有数据的平面数组中,都没有关系。两者都是可以接受的。

代码语言:javascript
复制
int data[16][42][14];   // n-dimensional array
int data[16 * 42 * 14]; // flat array containing the same data
EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2012-12-26 20:00:17

你可以使用递归,对于每个维度“猜测”它的索引,并递归地调用一个较小的问题,类似于(peudo代码):

代码语言:javascript
复制
iterate(d,n,size,res):
   if (d >= n): //stop clause
       print res
       return
   for each i from 0 to size[d]:
       res.append(i) //append the "guess" for this dimension
       iterate(d+1,n,size,res)
       res.removeLast //clean up environment before next iteration

其中:

  • d是当前访问的dimension
  • sizen是input
  • res是表示当前部分结果的向量

使用iterate(0,n,size,res)调用,其中res被初始化为一个空列表。

C++代码应该是这样的:

代码语言:javascript
复制
void iterate(int d,int n,int size[], int res[]) {
    if (d >= n) { //stop clause
       print(res,n);
       return;
   }
   for (int i = 0; i < size[d]; i++) { 
       res[d] = i;
       iterate(d+1,n,size,res);
   }
}

ideone上提供了完整的代码和一个简单的示例

票数 7
EN

Stack Overflow用户

发布于 2016-12-01 07:18:19

Python代码:

代码语言:javascript
复制
def nd_range(start, stop, dims):
  if not dims:
    yield ()
    return
  for outer in nd_range(start, stop, dims - 1):
    for inner in range(start, stop):
      yield outer + (inner,)

示例:

代码语言:javascript
复制
print(list(nd_range(0, 3, 3)))

(0,0,0),(0,0,1),(0,0,2),(0,1,0),(0,1,2),(0,2,0),(0,2,1),(0,2,2),(1,0,0),(1,0,1),(1,0,2),(1,1,0),(1,1,0),(1,1,1)1,2),(1,2,0),(1,2,1),(1,2,2),(2,0,0),(2,0,2),(2,1,0),(2,1,1),(2,1,2),(2,2,0),(2,2,1),(2,2,2)

票数 5
EN

Stack Overflow用户

发布于 2012-12-26 20:07:56

你可以使用递归。

代码语言:javascript
复制
iterate_n(array, n)
    if n == 0
        do something with the element
    else
        for ary in array
            iterate_n(ary, n-1)
        end_for
    end_if
end
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14040260

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档