假设我想要a,b和c中2个字母的所有排列。

我可以:

my @perm = <a b c>.combinations(2)».permutations;
say @perm;
# [((a b) (b a)) ((a c) (c a)) ((b c) (c b))]

这很接近,但不是我真正需要的。
我如何“压平”这个,以便得到:
# [(a b) (b a) (a c) (c a) (b c) (c b)]

最佳答案

另请参见"a better way to accomplish what I (OP) wanted"
另请参见"Some possible solutions" answer to "How can I completely flatten a Raku list (of lists (of lists) … )" question
添加下标

my \perm = <a b c>.combinations(2)».permutations;
say perm;       # (((a b) (b a)) ((a c) (c a)) ((b c) (c b)))
say perm[*];    # (((a b) (b a)) ((a c) (c a)) ((b c) (c b)))
say perm[*;*];  # ((a b) (b a) (a c) (c a) (b c) (c b))
say perm[*;*;*] # (a b b a a c c a b c c b)
笔记
我使用了一个非Sigil'd变量,因为对于那些不认识Raku的人来说,这更清楚了。
我没有将下标附加到原始表达式后,但是我可以这样做:
my \perm = <a b c>.combinations(2)».permutations[*;*];
say perm;       # ((a b) (b a) (a c) (c a) (b c) (c b))

关于raku - 如何在perl 6中 “flatten”列表列表?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37173023/

10-11 06:53