如何在Perl中生成列表的所有子集?

5 perl set subset

我在Perl数组中有一个数学集:(1,2,3).我想找到该集合的所有子集:(1),(2),(3),(1,2),(1,3),(2,3).

有3个元素,这不是太难,但如果设置有10个元素,这将变得棘手.

思考?

Joh*_*lla 12

您可以像Matthew提到的那样使用Data :: PowerSet.但是,如果如您的示例中所示,您只需要适当的子集而不是每个子集,则需要做更多的工作.

  # result: all subsets, except {68, 22, 43}.
  my $values = Data::PowerSet->new({max => 2}, 68, 22, 43);
Run Code Online (Sandbox Code Playgroud)

同样,如果要省略空集,只需添加min参数:

  # result: all subsets, except {} and {68, 22, 43}.
  my $values = Data::PowerSet->new({min => 1, max => 2}, 68, 22, 43);
Run Code Online (Sandbox Code Playgroud)

否则,要获取所有子集,只需省略两个参数:

  # result: every subset.
  my $values = Data::PowerSet->new(68, 22, 43);
Run Code Online (Sandbox Code Playgroud)