在Perl中,如何迭代多个集合的笛卡尔积?
问题内容:
在给定x
数量的数组(每个数组可能包含不同数量的元素)的情况下,如何遍历从每个数组中选择一项的所有组合?
例:
[ ] [ ] [ ]
foo cat 1
bar dog 2
baz 3
4
退货
[foo] [cat] [ 1 ]
[foo] [cat] [ 2 ]
...
[baz] [dog] [ 4 ]
我正在Perl,顺便说一句。
问题答案:
可以在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;
}