我有一个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循环。
有人对如何做到这一点有任何好的想法?谢谢!
答案 0 :(得分:0)
我能够通过创建一个包含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',因此,它是我想要循环的那些变量。
我确信有一种更简单的方法可以做到这一点,但现在可以使用。