2

n 次元配列をトラバースする必要があります。配列は構築され、別の関数から渡され、次元数は事前にわかりません。これは、VBA に似たプリミティブ言語で行う必要があります。したがって、Python のような良さはありません。

これをどのように達成できるか知っている人はいますか?

サンプル配列は、5 x 6 x 1 x 8 配列のようなものです。つまり、次元 1=5、次元 2=6、次元 3=1、次元 4=8 の 4 次元配列です。

5*6*1*8= 240 個の要素のそれぞれをトラバースし、何らかの方法で結果を記録して、結果を要素と関連付けることができるようにする必要があります。

編集: より明確にするために、トラバーサルの最後に、位置 (2,3,1,5) の要素が x であると言えるようにしたいと考えています。したがって、配列内の要素の位置と要素自体を記録する必要があります。

問題の配列は、このようなものです

`Variant としてのグローバル multiArray

'\さて、他の多くの関数は、適格な候補を見つけると、'\以下のようにこの配列に配列を追加します。

Redim multiarray(len(multiArray)+1) multiArray(len(multiarray))= newElementArray()

` だから、私は以下のようなものになります. 実行時にディメンションが変更されるだけなので、それをトラバースするには汎用ロジックが必要です。 マルチジャグ配列

4

2 に答える 2

3

coordinaten次元配列内の要素の位置をaで表します。たとえば(2,1,3,4)、次の位置にある要素に対応しますarray[2][1][3][4]

var array = // n-dimensional

function traverse(array, coordinate, dimension);
   for(var i = 0 ; i < array.length ; i++){
      // assuming coordinate is immutable. Append the current iteration's index.
      currentCoordinate = coordinate.add(i); 
      if(dimension == 1){
         doSomething(currentCoordinate, array[i]);
      }else{
         traverse(array[i], currentCoordinate, dimension(array[i]));
      }      
   }
}

coordinate = []; // at first, the top level coordinate is empty.
traverse(array, coordinate, 4); // 4-dimensional
于 2012-08-01T21:57:45.547 に答える
0

実装は、ggreiner が示すように、多次元配列かジャグ配列 (配列の配列) かによって異なります。

配列の値のみをトラバースする必要がある場合は、次のように簡単にできます: (C#)

int[, ,] arr = new int[1, 3, 2] { { { 1, 2 }, { 3, 4 }, { 5, 6 } } };
foreach(int i in arr)
    Console.WriteLine(i);
于 2012-08-01T22:35:53.597 に答える