2017-11-30 9 views
2

私は現在、参照されたハッシュとそのハッシュに含まれるキーの配列を持っています。キーの配列に対応する値の配列を取得したいです。私は複数行でこれを行う方法を知って参照されたハッシュとperlのキー配列から値の配列を効率的に取得する方法は?

# 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行で?いくつかの追加機能を有効にすることでPerlの上

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

または、5.20+:

答えて

5

簡単:

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

または、Perlの上5.24+

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

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

これは、を利用していますの%hashの複数のキー(「スライス」)の値を取得できるという事実0構文。まず逆参照する必要があります。詳細については、perldocを参照してください。

+0

これは同じですか? @($ hashRef - > {@ keys}} –

+0

ああ、わかりましたが、これは今でも同等です:@ {$ hashRef} {@ keys} –

+0

うん。あなたはそれを持っています。 – mwp

関連する問題