Say У меня есть хэш:Все возможные комбинации с ключевыми
1 => 1
2 => abc
3 => xyz
В Perl, как я могу дать строку как 211, и получить все возможные комбинации в соответствии с этой хэш: abc11, 1abc1, 11abc и т.д. ...
Say У меня есть хэш:Все возможные комбинации с ключевыми
1 => 1
2 => abc
3 => xyz
В Perl, как я могу дать строку как 211, и получить все возможные комбинации в соответствии с этой хэш: abc11, 1abc1, 11abc и т.д. ...
Есть несколько перестановок списка модулей на CPAN, многие в вопросе связан выше: How can I generate all permutations of an array in Perl?
Использование List::Permutor модуля:
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}++;
}
который печатает:
abc11 1abc1 11abc
Обратите внимание, что вы будете иметь проблемы с использованием голых цифр в шаблоне, если вы выходите за пределы ключей 0 .. 9
. (делает 10
средний 10
или 1,0
...). Вероятно, вы должны изменить свой шаблон, чтобы иметь разделитель записей.
Вы могли бы попробовать что-то подобное, получить цифры из строки, и петлю и построить строку:
my @digits = ($str =~ /(\d)/g);
my $val;
foreach (@digits) {
# %values holds key/value pairs
$val .= $values{$_};
}
Это хэш, а не список. –
Возможный дубликат: http://stackoverflow.com/questions/635768/how-can-i-generate-all-permutations-of-an-array-in-perl – Richard