在列表中§

有关例程排列,请参阅上下文中的主要文档

multi        permutations(Int()    $from --> Seq:D)
multi        permutations(Iterable $from --> Seq:D)
multi method permutations(List:D:        --> Seq:D)

将列表的所有可能排列作为列表的Seq返回

.say for <a b c>.permutations;
# OUTPUT: 
# (a b c) 
# (a c b) 
# (b a c) 
# (b c a) 
# (c a b) 
# (c b a)

permutations将所有元素视为唯一,因此(1, 1, 2).permutations返回一个包含 6 个元素的列表,即使只有三个不同的排列,因为前两个元素相同。

子例程形式的行为与方法形式相同,从其第一个参数$from计算排列。如果$from不是Iterable,则将$from强制转换为Int,并从使用0..^$from构建的Range中进行选择

.say for permutations 3;
# OUTPUT: 
# (0 1 2) 
# (0 2 1) 
# (1 0 2) 
# (1 2 0) 
# (2 0 1) 
# (2 1 0)

在任何§

有关方法排列,请参阅上下文中的主要文档

method permutations(|c)

通过应用其.list方法将调用者强制转换为list,并在其上使用List.permutations

say <a b c>.permutations;
# OUTPUT: «((a b c) (a c b) (b a c) (b c a) (c a b) (c b a))␤» 
say set(1,2).permutations;
# OUTPUT: «((2 => True 1 => True) (1 => True 2 => True))␤»

具有单个元素或没有元素的数据结构的排列将返回一个包含空列表或包含单个元素的列表。

say 1.permutations# OUTPUT: «((1))␤»