我需要遍历一个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()
` 所以,我最终会得到类似下面的东西。只有尺寸会在运行时发生变化,所以,我需要一个通用的逻辑来遍历它。
答案 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);