从Perl中的每个键具有多个值的哈希中获取所有值

时间:2012-08-07 10:47:33

标签: perl hash hashmap

如何获取所有值并打印它,在代码中每个键有多个值

%ages = (
" Michael Caine" => {39,34,11,12},
" Dirty Den" => {34,56,76,58},
" Angie" => {27,56,78,89}
);    

@keys = keys %ages;
@val = values %ages;
print @keys;
print @val; #it will not work in case of multiple values per key

3 个答案:

答案 0 :(得分:3)

你有三个问题。

  1. 您正在使用hashrefs,而不是arrayrefs
  2. 您没有为@val分配任何内容(至少,您在编辑问题之前没有这样做)
  3. 您没有采取任何措施取消引用您的参考资料
  4. 这样:

    use v5.10;
    
    my %ages = (
    " Michael Caine" => [39,34,11,12],
    " Dirty Den" => [34,56,76,58],
    " Angie" => [27,56,78,89]
    );    
    
    foreach my $key (keys %ages) {
        say $key;
        say @{$ages{$key}};
    }
    

答案 1 :(得分:1)

%ages = (
" Michael Caine" => [39,34,11,12],
" Dirty Den" => [34,56,76,58],
" Angie" => [27,56,78,89],
);    

@keys = keys %ages;
@val = values %ages;
print "@keys\n";
print "@{$_}\n" for @val;

答案 2 :(得分:1)

Bhargav Gor,bhai,这是为密钥存储多个值的常用方法。

但是,

  1. 请记住这是一个匿名哈希即键值对: {39,34,11,12} =(“39”=> 34,“11” => 12)

  2. 这是一个匿名数组: [39,34,11,12]

  3. 您使用过1.这意味着您使用另一个哈希值作为%age hash的值,即

    %ages =
    " Michael Caine" => ("39"=>34,"11"=>12),
    " Dirty Den" => ("34"=>56,"76"=>58),
    " Angie" => ("27"=>56,"78"=>89)
    

    如果要提取关键字“Michael Caine”的键“39”的值

    print %{$ages{" Michael Caine"}}->{"39"}  #prints 34
    

    如果您真的想要这样的结构,那么这就是您可以显示所有值的方法

    foreach(keys %ages) {
      $name = $_;
      foreach(keys %{$ages{$name}}) {
        print %{$ages{$name}}->{$_},",";
      }
      print "\n";
    }
    #output:
    #>34,12,
    #>56,58,
    #>56,89,
    

    我不认为你想要这种结构,你可能想要使用一个数组, (匿名数组)。

    %ages = (
    " Michael Caine" => [39,34,11,12],
    " Dirty Den" => [34,56,76,58],
    " Angie" => [27,56,78,89]
    );
    

    现在您可以轻松地显示如下输出:

    foreach(keys %ages) {
      $name = $_;
      foreach( @{$ages{$name}} ) {
        print $_,",";
      }
      print "\n";
    }
    #output:
    #>39,34,11,12,
    #>34,56,76,58,
    #>27,56,78,89,
    

    对不起,我不得不匆忙,抱歉打字错误,希望你明白你应该为这样的存储做什么