我有一堆数组@a1,@a2,... @ak (我不知道有多少)。我想创建一个数组,它包含数组的幂集合的并集。也就是说,当且仅当该数组的条目对于某些i包含在@ai中时,该数组才在输出中。输出不应该有重复项。
我能想到的唯一方法是创建一个包含每个数组的幂集合的数组,然后合并这些数组。但是,在联合时,我必须检查入口是否相等。
还有更好的吗?
像这样的东西,取所有数组的并集,取幂集,然后删除不应该在那里的东西,因为数组的并集太大了。
编辑:例如,假设输入为(1,2),(2, 3,4),则输出应为(),(1),(2),(3),(4),(1,2),(2,3),(3,4),(2,4),(2,3,4)。任何订单都可以接受。
发布于 2018-06-08 19:38:02
检查https://metacpan.org/pod/List::PowerSet
use strict;
use warnings;
use List::PowerSet 'powerset_lazy';
my @arr = (
[1,2],
[2,3,4],
);
my %hash;
for my $v (@arr) {
my $ps = powerset_lazy(@$v);
while (my $set = $ps->()) {
my $str = join ",", @$set;
next if $hash{$str}++;
print "($str)\n";
}
}
输出
(1,2)
(2)
(1)
()
(2,3,4)
(3,4)
(2,4)
(4)
(2,3)
(3)
https://stackoverflow.com/questions/50765821
复制相似问题