将哈希键转换为数组

时间:2011-12-17 07:44:15

标签: arrays perl hash

我有一个散列(%hash),其值为

test0  something1
test1  something
test2  something

我需要使用以下元素

从键构建数组
@test_array = part0_0 part1_0 part2_0

基本上,我必须使用testx(key)并将其替换为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 个答案:

答案 0 :(得分:9)

为什么不轻松

my @array = ( keys %hash )

答案 1 :(得分:7)

看起来是使用non-destructive /r option for substitutions的好时机。

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

对于不支持/r的perl版本:

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

答案 2 :(得分:3)

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;

答案 3 :(得分:0)

my @array = map { s/^.+([0-9]).*/part$1_0/g;split }  keys %hash;