Perl: использование glob для перестановки значений в массиве определенной пользователем длины - PullRequest
2 голосов
/ 05 января 2012

Я только что прочитал

Как мне сгенерировать все перестановки массива в Perl? http://www.perlmonks.org/?node_id=503904 и https://metacpan.org/module/Algorithm::Permute

Я хочу создатьвсе возможные комбинации с определенной пользователем длиной значений в массиве.

perlmonks сделал это так:

@a= glob "{a,b,c,d,e,1,2,3,4,5}"x 2;
for(@a){print "$_ "}

, и это прекрасно работает, но вместо "{a,b,c,d,e,1,2,3,4,5}" я хотел бы использоватьмассив

я попробовал это:

@a= glob @my_array x $userinput ;
for(@a){print "$_ "}

но это не сработало, как я могу это сделать?Или как я могу ограничить длину перестановки в Algorithm :: Permute?

1 Ответ

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

Просто сгенерируйте строку из массива:

my @array = ( 'a' .. 'e', 1 .. 5 );
my $stringified = join ',', @array;
my @a = glob "{$stringified}" x 2;

say 0+@a;             # Prints '100';
say join ', ', @a;    # 'aa, ab, ac, ad ... 53, 54, 55'

Можно также использовать модуль CPAN. Как List::Gen:

use List::Gen 'cartesian';

my @permutations = cartesian { join '', @_ } map [ $_ ], ( 'a'..'e', 1..5 ) ;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...