Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
354 views
in Technique[技术] by (71.8m points)

raku - How do I “flatten” a list of lists in perl 6?

Let's say I want all permutations of 2 letters out of a, b and c.

I can do:

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

which is close, but not exactly what I need. How do I “flatten” this so that I get:

# [(a b) (b a) (a c) (c a) (b c) (c b)]

?

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

See also "a better way to accomplish what I (OP) wanted".

See also "Some possible solutions" answer to "How can I completely flatten a Raku list (of lists (of lists) … )" question.

Add a subscript

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)

Notes

I used a non-sigil'd variable because I think it's a bit clearer what's going on for those who don't know Raku.

I didn't append the subscript to the original expression but I could have:

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

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...