如何通过其中一个值从哈希数组中获取哈希引用?

时间:2010-09-24 07:54:35

标签: arrays perl hash reference perl-data-structures

我有一个哈希数组,每个哈希包含相同的键,但值是唯一的。在特定值的基础上,我需要存储散列引用。

请参阅以下示例以正确理解它:

my @aoaoh = (
            { a => 1, b => 2 },
            { a => 3, b => 4 },
            { a => 101, b => 102 },
            { a => 103, b => 104 },
    );  

现在我将检查散列键a是否包含值101。如果是,那么我需要存储整个散列引用。

怎么做?

3 个答案:

答案 0 :(得分:14)

my $key = "a";
my ($ref) = grep { $_->{$key} == 101 } @aoaoh;

或使用List::Util的{​​{1}}:

first()

答案 1 :(得分:2)

之前,我使用foreach来获取Hash ref之类的

foreach my $href (@aoaoh){
     foreach my $hkeys(keys %{$href}){
           if(${$href}{$hkeys} == 101){
              my $store_ref = $href;
           }
     }
}

现在在获得eugene的帮助后,我可以像

那样做

my ($hash_ref) = grep {$_->{a} == 101 } @aoaoh;

或以一般方式(当我们不知道密钥时)然后使用

my ($hash_ref) = grep { grep { $_ == 101 } values %$_ } @aoaoh; 

答案 2 :(得分:1)

first方法很好,如果我只想做一次或两次,我会使用它。但是,如果你想多次这样做,最好写一个查找表,如下所示:

my %hash_lookup;
foreach my $h ( @aoaoh ) { 
    foreach my $k ( keys %$h ) { 
        $hash_lookup{$k}{ $h->{ $k } } = $h;
    }
}

然后你会发现你的参考:

my $ref = $hash_lookup{ $a_or_b }{ $value };