将哈希键转换为数组

use*_*021 3 arrays perl hash

我有一个带有以下值的哈希值(%hash)

test0  something1
test1  something
test2  something
Run Code Online (Sandbox Code Playgroud)

我需要使用以下元素从键构建数组

@test_array = part0_0 part1_0 part2_0
Run Code Online (Sandbox Code Playgroud)

基本上,我必须使用testx(key)并将其替换为partx_0

当然,我可以像下面这样轻松创建数组

my @test_array;

foreach my $keys (keys %hash) {
    push(@test_array,$keys);
}
Run Code Online (Sandbox Code Playgroud)

我会的

@test_array = test0 test1 test2
Run Code Online (Sandbox Code Playgroud)

但我想要的是得到part0_0而不是test0,part1_0而不是test1和part2_0而不是test2

小智 9

为什么不做更容易

my @array = ( keys %hash )
Run Code Online (Sandbox Code Playgroud)

  • 在某些版本的 Perl 中,您会收到一个标量(表示您有多少个键) (2认同)

TLP*_*TLP 7

看起来是使用非破坏性/r选项进行替换的好时机.

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

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

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