In Perl, how can I iterate over the Cartesian product of multiple sets?

前端 未结 5 776
Happy的楠姐
Happy的楠姐 2020-12-21 02:21

Given x number of arrays, each with a possibly different number of elements, how can I iterate through all combinations where I select one item from each array?

5条回答
  •  眼角桃花
    2020-12-21 02:37

    There's one method I thought of first that uses a couple for loops and no recursion.

    1. find total number of permutations
    2. loop from 0 to total_permutations-1
    3. observe that, by taking the loop index modulus the number of elements in an array, you can get every permutations

    Example:

    Given A[3], B[2], C[3],

    for (index = 0..totalpermutations) {
        print A[index % 3];
        print B[(index / 3) % 2];
        print C[(index / 6) % 3];
    }
    

    where of course a for loop can be substituted to loop over [A B C ...], and a small part can be memoized. Of course, recursion is neater, but this might be useful for languages in which recursion is severely limited by stack size.

提交回复
热议问题