Все возможные комбинации с ключом - PullRequest
0 голосов
/ 31 января 2012

Скажи, что у меня есть хэш:

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

В Perl, как я могу дать строку типа 211 и получить все возможные комбинации в соответствии с этим хешем: abc11, 1abc1, 11abc и т. Д. *

Ответы [ 2 ]

4 голосов
/ 31 января 2012

В CPAN есть несколько модулей перестановки списков, многие из которых приведены в вопросе, связанном выше: Как я могу сгенерировать все перестановки массива в Perl?

Используя список :: 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 ...).Вам, вероятно, следует изменить свой шаблон, чтобы иметь разделитель записей.

1 голос
/ 31 января 2012

Вы можете попробовать что-то вроде: получить цифры из строки, выполнить цикл и построить строку:

my @digits = ($str =~ /(\d)/g);
my $val;
foreach (@digits) {
    # %values holds key/value pairs
    $val .= $values{$_};
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...