阵列-AS3的组合子集

时间:2014-03-27 18:40:49

标签: java arrays actionscript-3 subset

假设我有一个数组[0,1,2,3]和一个参数2作为输入

我希望输出为

0 0
0 1
0 2
0 3
1 0
1 1
1 2
1 3
2 0
2 1
2 2
2 3
3 0
3 1
3 2
3 3

参数的长度决定了每个元组中的组合数,而数组则用于生成数字。

有快速的方法吗。

谢谢!

2 个答案:

答案 0 :(得分:2)

哦,我不知道,但首先,我创建了combinationspermutations,过了一段时间,我为你的任务创建了实用工具方法。

var subsetTest:Array = [];
subsetFill([0, 1, 2], [], subsetTest, 2);
prettyPrint(subsetTest);

private function subsetFill(values:Array, cursor:Array, result:Array, length:uint):void {
    if (cursor.length > length) {
        return;
    }
    if (cursor.length == length) {
        result.push(cursor.slice());
    }

    var i:uint, len:uint = values.length;

    for (i; i < len; ++i) {
        cursor.push(values[i]);
        subsetFill(values, cursor.slice(), result, length);
        cursor.length = cursor.length - 1;
    }
}

//Auxiliary method for tracing 
private function prettyPrint(list:Array):void {
    var i:uint, len:uint = list.length;

    for (i; i < len; ++i) {
        trace(list[i]);
    }
}

结果:

[trace] 0,0
[trace] 0,1
[trace] 0,2
[trace] 1,0
[trace] 1,1
[trace] 1,2
[trace] 2,0
[trace] 2,1
[trace] 2,2

如果有人感兴趣,我也可以分享combinationspermutations个功能;)

答案 1 :(得分:0)

三个周期:

for(var i:int = 0; i < to_do.length; i++) {
    for (var k:int = 0; k < to_do[i];k++){
        new_array.push(new Array());
        for (var j:int = 0; j < another_array.length; j++) {
            new_array[k].push(another_array[j]);
        }
    }
}

这应该可以完成工作。