如何从perl引用的哈希和键数组中有效地获取值数组?

时间:2017-11-30 21:07:50

标签: arrays perl hash

我目前有一个引用的哈希和一个哈希包含的键数组。我想得到一个与我的数组键对应的值数组。

我知道如何在多行中执行此操作:

# Getting hash reference and array of keys.
my $hashRef = {
    one   => 'foo',
    two   => 'bar',
    three => 'baz'
};
my @keys = ('one', 'three');

# Getting corresponding array of values.
my @values;
foreach my $key (@keys) {
    push @values, $hashRef->{$key};
}

但是,我认为必须有一种更好的方法来避免使用循环。但不幸的是,我无法弄明白。我怎样才能有效率 从引用的哈希和键数组中获取值数组;理想情况下,尽可能在一行?

1 个答案:

答案 0 :(得分:5)

轻松:

my @values = @$hashRef{@keys};

或者,在Perl 5.24 +上:

my @values = $hashRef->@{@keys};

或者,通过启用一些其他功能,在Perl 5.20+上:

use feature qw(postderef);
no warnings qw(experimental::postderef);

my @values = $hashRef->@{@keys};

这利用了以下事实:您可以使用%hash语法获取@hash{LIST}的多个键("切片")的值。你必须先取消引用它。有关详细信息,请参阅perldoc