当尺寸可变时,遍历n维数组

时间:2012-08-01 21:52:37

标签: algorithm multidimensional-array

我需要遍历一个n维数组。构建数组并从另一个函数传递,并且事先不知道维数。这需要用类似于VBA的原始语言来完成。所以,没有python类型的善良存在。

有谁知道如何实现这一目标?

样本数组可能类似于5 x 6 x 1 x 8数组。因此,它是一个4维数组,维度1 = 5,维度2 = 6,维度3 = 1,维度4 = 8。

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

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

有问题的数组更像是

`Global multiArray as Variant

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

Redim多阵列(len(multiArray)+1) multiArray(len(multiarray))= newElementArray()

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

2 个答案:

答案 0 :(得分:3)

coordinate表示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

答案 1 :(得分:0)

实现将取决于它是多维数组还是像ggreiner所示的锯齿状数组(数组数组)。

如果您只需要遍历数组的值,它可以像下面这样简单: (C#)

int[, ,] arr = new int[1, 3, 2] { { { 1, 2 }, { 3, 4 }, { 5, 6 } } };
foreach(int i in arr)
    Console.WriteLine(i);