2

我需要遍历一个 n 维数组。该数组是从另一个函数构建和传递的,并且事先不知道维数。这需要使用类似于 VBA 的原始语言来完成。因此,不存在 Python 的优点。

有谁知道如何做到这一点?

样本数组可能类似于 5 x 6 x 1 x 8 数组。所以,它是一个 4 维数组,dimension1=5,dimention2=6,dimension3=1 和dimension4=8。

我需要遍历每个 5*6*1*8= 240 个元素并以某种方式记录我的结果,以便我可以将我的结果与元素联系起来。

编辑:为了更清楚,在遍历结束时,我希望能够说位置 (2,3,1,5) 的元素是 x。所以,我需要记录元素在数组中的位置以及元素本身。

有问题的数组更像这样

`全局多数组作为变体

'\现在,许多其他函数,当找到符合条件的候选人时,将数组添加到这个数组中'\如下所示。

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

` 所以,我最终得到了类似下面的东西。只有尺寸会在运行时发生变化,所以,我需要一个通用的逻辑来遍历它。 多锯齿阵列

4

2 回答 2

3

令 acoordinate表示元素在 n 维数组中的位置。例如(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 回答