perl - 如何在 Perl 中生成数组的所有排列?

标签 perl algorithm arrays permutation

在 perl 中生成数组的所有 n! 排列的最佳(优雅、简单、高效)方法是什么?

例如,如果我有一个数组@arr = (0, 1, 2),我想输出所有排列:

0 1 2
0 2 1
1 0 2
1 2 0
2 0 1
2 1 0

它可能应该是一个返回迭代器的函数(惰性/延迟求值,因为 n! 可能变得如此之大),所以它可以这样调用:

my @arr = (0, 1, 2);
my $iter = getPermIter(@arr);
while (my @perm = $iter->next() ){
    print "@perm\n";
}

最佳答案

我建议你使用 List::Permutor :

use List::Permutor;

my $permutor = List::Permutor->new( 0, 1, 2);
while ( my @permutation = $permutor->next() ) {
    print "@permutation\n";
}

关于perl - 如何在 Perl 中生成数组的所有排列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/635768/

相关文章:

perl - 数据库驱动器 :SQLite disconnect

perl 如何将 bool 值强制为 0/1

perl - 如何将数组传递给 Perl XS 中的 C 函数?

mysql - Perl - 更新没有主键的mysql表

python - 寻找一种算法来计算可能模式的数量

algorithm - 如何从算法中看到碰撞?

algorithm - 这段代码的复杂性是什么,它的嵌套 for 循环重复地使它的计数器加倍?

c - 为什么我们在结构数组中使用点运算符 (.) 而不是箭头运算符 (->) 作为函数参数?

c - 将字符串数组的二维指针数组传递给C中的函数

c# - 如何在c#字段中转换json数组字段