代码之家  ›  专栏  ›  技术社区  ›  Nikhil Jain

如何根据哈希数组的一个值从该数组中获取哈希引用?

  •  3
  • Nikhil Jain  · 技术社区  · 14 年前

    我有一个哈希数组,每个哈希包含相同的键,但值是唯一的。根据特定的值,我需要存储哈希引用。

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

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

    现在我检查一下哈希键 a 包含值 101 . 如果是,那么我需要存储整个哈希引用。

    如何做到这一点?

    3 回复  |  直到 11 年前
        1
  •  14
  •   Eugene Yarmash    14 年前
    my $key = "a";
    my ($ref) = grep { $_->{$key} == 101 } @aoaoh;
    

    或使用 List::Util first() :

    use List::Util 'first';
    my $ref = first { $_->{$key} == 101 } @aoaoh;
    
        2
  •  2
  •   Nikhil Jain    14 年前

    早些时候,我用 foreach 用于获取 Hash ref 喜欢

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

    现在,在得到尤金的帮助后,我可以像

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

    或者一般情况下(当我们不知道钥匙时),然后使用

    my ($hash_ref) = grep { grep { $_ == 101 } values %$_ } @aoaoh; 
    
        3
  •  1
  •   Axeman maxelost    14 年前

    这个 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 };