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
686 views
in Technique[技术] by (71.8m points)

perl - All possible combinations with key

Say I have a hash:

1 => 1
2 => abc
3 => xyz

In Perl, how can I give a string like 211, and get all the possible combinations according to that hash: abc11, 1abc1, 11abc etc...

See Question&Answers more detail:os

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

1 Reply

0 votes
by (71.8m points)

There are several list permutation modules on CPAN, many in the question linked above: How can I generate all permutations of an array in Perl?

Using the List::Permutor module:

my $template = 211;

my %strings = (
    1 => 1,
    2 => 'abc',
    3 => 'xyz',
);

use List::Permutor ();

my $perm = List::Permutor->new(split //, $template);

my %seen;
while (my @set = $perm->next) {
    my $str = join '' => @strings{@set};
    say $str unless $seen{$str}++;
}

which prints:

abc11
1abc1
11abc

Do note that you will have problems using bare numbers in your template if you go beyond the keys 0 .. 9. (does 10 mean 10 or 1,0...). You should probably change your template to have a record separator.


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

...