0

別の 3D 配列の計算に基づいて多次元配列を作成しようとしています。

入力配列の形式は [shift, start Num, end num] です

「、」は視覚的な目的のためだけであることを明確にする必要があります。独自の配列の場所に各値が必要です[value1]=location 0,0 [value2]=location 0,1 [value3]=location 0,2

例:

aInput looks like this
[0,1,5]
[1,1,3]
[2,1,2]

aOutput should look like this
[1,1,1]
[1,1,2]
[1,2,1]
[1,2,2]
[1,3,1]
[1,3,2]
[2,1,1]
[2,1,2]
[2,2,1]
[2,2,2]
[2,3,1]
[2,3,2]
[1,3,2]
[3,1,1]
[3,1,2]
[3,2,1]
[3,2,2]
[3,3,1]
[3,3,2]
[etc]

シフトに基づいて配列内のアイテムの数を増やす必要があります。つまり、0 = シフトは 1 列、シフト = 1 は 2 列、シフト = 3 は 3 列などになります。これは私がこれまでに持っているものですが、シフトで何かを計算する方法がわかりません。

var aInput = new Array();
aInput[0] = new Array("0", "1","5");
aInput[1] = new Array("1", "1","3");
aInput[2] = new Array("2", "1","2");

for (var x=0; x < aInput[x].length; x++){
    //Calculate out number
    if (aInput[x][0] == 0){ // Im sure this should be a loop of some sort, just not sure how to do it
        var i=Number(aInput[x][1]);
        while (i <= Number(aInput[x][2])){
            //Write to output array
            aOutput.push(i);
            i++;
        }
    }
}

助けてくれてありがとう、私はこれに本当に困惑しています。

4

2 に答える 2

0
var aInput = new Array();
aInput[0] = new Array("0", "1", "5");
aInput[1] = new Array("1", "1", "3");
aInput[2] = new Array("2", "1", "2");

var input_indexed = [],
    elem = []; // elem holds the row to be added to the output

// Get aInput[] into a more useful arrangement
for (var i = 0; i < aInput.length; i++) {
    // Save the range of each column
    input_indexed[parseInt(aInput[i][0])] = {
        start: parseInt(aInput[i][1]),
        end: parseInt(aInput[i][2])
    };
    // Initialize elem with the start value of each column
    elem[aInput[i][0]] = parseInt(aInput[i][1]);
}

// Produce the output
aOutput = [];
done = false;
while (!done) {
    aOutput.push(elem.slice(0)); // push a copy of elem into result
    for (i = elem.length - 1;; i--) { // Increment elements from right to left
        if (i == -1) { // We've run out of columns
            done = true;
            break;
        }
        elem[i]++; // Increment the current column
        if (elem[i] <= input_indexed[i].end) {
            // If it doesn't overflow, we're done
            break;
        }
        // When it overflows, return to start value and loop around to next column
        elem[i] = input_indexed[i].start;
    }
}

フィドル

于 2013-04-29T23:51:41.477 に答える
0
var aOutput = [];
for (var i in aInput) {
    var y = parseInt(aInput[i][1])
    for (var x = y; x <= parseInt(aInput[i][2]); x++) {
        aOutput.push([i, y, x]);
    }
}
于 2013-04-29T23:21:52.120 に答える