我有一个applet,允许用户为10个变量定义值,所有变量都可以是数组。然后,我希望程序遍历所有可能的组合,然后将计算结果保存到一个变量中。
之前我硬编码它来初始化结果数组SIGMA,通过循环遍历每个变量,无论它是矢量还是单个值,IE:
SIGMA = new Array(A.length);
for (i1=0; i1<A.length; i1++) {
SIGMA[i1] = new Array(B.length);
for (i2=0; i2<B.length; i2++) {
SIGMA[i1][i2] = new Array(C.length);
for (i3=0; i3<C.length; i3++) {
...
}
}
}
这会产生一个10维的SIGMA数组,如果有几个或更多的变量是数组,这会使处理非常慢。
我想做的是让它初始化SIGMA仅为那些变量是一个数组,而不是一个奇异值。因此,如果除了两个变量(比如X和Y)之外的所有变量都是单个数字,那么我希望有:
SIGMA = new Array(X.length);
for (i1=0; i1<X.length; i1++) {
SIGMA[i1] = new Array(Y.length);
}
然而,我不太确定这样做的最佳方法是什么,因为for循环的数量将取决于数组变量的数量。我想我要么需要使用递归函数,要么以某种方式结合一个while循环。
有人有什么好主意吗?谢谢!
我可以通过创建一个包含for循环的递归函数来解决这个问题:
sigma = new Array(eval(var_idx[0]).length);
sigma_forloop('sigma', 0)
function sigma_forloop(X, idx) {
for (var i=0; i<eval(var_idx[idx]).length; i++) {
eval(X + '[' + i + ']' + ' = new Array(eval(var_idx[idx+1]).length);')
if (idx+2 < var_idx.length) {
var Y = X + '[' + i + ']';
sigma_forloop(Y, idx+1);
}
}
}
变量'var_idx'在包含有多个值的变量的字符串数组中,因此,我要循环的就是这些变量。
我相信有一个更简单的方法,但现在这个工作。