【问题标题】:fetching all values from Hashes with Multiple Values Per Key in perl在perl中从每个键的多个值的哈希中获取所有值
【发布时间】:2012-08-04 08:50:00
【问题描述】:

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

%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

【问题讨论】:

    标签: perl hash hashmap


    【解决方案1】:

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

    但是,

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

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

    您使用了 1. 这意味着您正在使用另一个哈希作为 %ages 哈希的值,即

    %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,
    

    对不起,我必须赶时间,错别字,希望你明白你应该怎么做这样的存储

    【讨论】:

    • 如果它是正确的,请把它标记为答案或支持它
    【解决方案2】:
    %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;
    

    【讨论】:

      【解决方案3】:

      你有三个问题。

      1. 您使用的是 hashrefs,而不是 arrayrefs
      2. 您没有为@val 分配任何内容(至少在您编辑问题之前没有分配任何内容)
      3. 您没有做任何事情来取消引用您的引用

      这样的:

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

      【讨论】:

        猜你喜欢
        • 2016-07-22
        • 1970-01-01
        • 2014-02-05
        • 2012-02-01
        • 2013-06-17
        • 2019-12-09
        • 2021-12-30
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多