Преобразование хеш-ключей в массив - PullRequest
3 голосов
/ 17 декабря 2011

У меня есть хэш (% hash) со следующими значениями

test0  something1
test1  something
test2  something

Мне нужно построить массив из ключей со следующими элементами

@test_array = part0_0 part1_0 part2_0

По сути, я должен взять testx (ключ) и заменить его на partx_0

Конечно, я могу легко создать массив, подобный следующему

my @test_array;

foreach my $keys (keys %hash) {
    push(@test_array,$keys);
}

и я получу

@test_array = test0 test1 test2

но я хотел бы получить part0_0 вместо test0, part1_0 вместо test1 и part2_0 вместо test2

Ответы [ 4 ]

9 голосов
/ 07 мая 2015

почему бы не сделать проще

my @array = ( keys %hash )
7 голосов
/ 17 декабря 2011

Похоже, самое время использовать опцию неразрушающий /r для замен .

my @array = map s/^test(\d+)/part${1}_0/r, keys %a;

Для версий Perl, которые не поддерживают /r:

my @array = map { s/^test(\d+)/part${1}_0/; $_ } keys %a:
3 голосов
/ 17 декабря 2011
my @a;
for (keys %hash) {
   push @a, 'part' . ( /^test([0-9]+)/ )[0] . '_0';
}

Но это просто напрашивается на использование map.

my @a =
   map { 'part' . ( /^test([0-9]+)/ )[0] . '_0' }
    keys %hash;
0 голосов
/ 17 декабря 2011
my @array = map { s/^.+([0-9]).*/part$1_0/g;split }  keys %hash;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...