一尘不染

在Perl中,如何迭代多个集合的笛卡尔积?

algorithm

在给定x数量的数组(每个数组可能包含不同数量的元素)的情况下,如何遍历从每个数组中选择一项的所有组合?

例:

[   ]   [   ]   [   ]
 foo     cat      1
 bar     dog      2
 baz              3
                  4

退货

[foo]   [cat]   [ 1 ]
[foo]   [cat]   [ 2 ]
  ...
[baz]   [dog]   [ 4 ]

我正在Perl,顺便说一句。


阅读 316

收藏
2020-07-28

共1个答案

一尘不染

可以在http://www.perlmonks.org/?node_id=7366上找到用于做笛卡尔积的递归和更流利的Perl示例(包括注释和文档)

例:

sub cartesian {
    my @C = map { [ $_ ] } @{ shift @_ };

    foreach (@_) {
        my @A = @$_;

        @C = map { my $n = $_; map { [ $n, @$_ ] } @C } @A;
    }

    return @C;
}
2020-07-28