10

変数として次元数とそれぞれのサイズを指定して、n 次元配列を反復処理するにはどうすればよいですか?

int n;
int size[n];

次元数が固定されていないため、次元ごとにネストされたループを記述できません。各次元数で動作するコードが必要です。

さらに、実際のデータが n 次元配列または大きな行にすべてのデータを含むフラット配列に格納されているかどうかは問題ではありません。どちらも許容範囲です。

int data[16][42][14];   // n-dimensional array
int data[16 * 42 * 14]; // flat array containing the same data
4

5 に答える 5

5

Python コード:

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,)

例:

print(list(nd_range(0, 3, 3)))

[(0, 0, 0), (0, 0, 1), (0, 0, 2), (0, 1, 0), (0, 1, 1), (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、1)、(1、1、2)、(1、2、0)、(1、2、1)、(1、2、2)、(2、0、 0)、(2、0、1)、(2、0、2)、(2、1、0)、(2、1、1)、(2、1、2)、(2、2、0) , (2, 2, 1), (2, 2, 2)]

于 2016-11-30T23:18:19.273 に答える
1

再帰を使用できます。ネストされた配列の疑似コード ソリューションを次に示します。

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
于 2012-12-26T12:07:56.350 に答える