【问题标题】:Array in value of hash perl哈希值中的数组 perl
【发布时间】:2012-12-07 13:28:27
【问题描述】:

是否可以将数组的引用分配为 perl 中哈希表的 key : value 对中的值?

【问题讨论】:

标签: arrays perl hash reference


【解决方案1】:
  %hash = ( 'somekey' => \@arrayvalue );
    $hash{'somekey'} = \@arrayvalue;

It is right. We can assign either hash or hash reference format. 

【讨论】:

    【解决方案2】:
    use Data::Dumper; @name=('5/17',
        '5/17','5/17','5/17','5/17','5/17','5/17','5/17'); @status_flags=('U
        H L','U C','U H L','U C','U C','U H L','U C', 'U H L');
        @ip_address=('192.168.0.11','192.168.0.2','192.168.0.13','192.168.0.0','192.168.0.3','192.168.0.12','192.168.0.4','192.168.0.14'); @dp_id=('0','0','0','0','0','0','0','0');
        @ip_prefix_length=('32','32','32','24', '32', '32','32','32');
    
        for ($value=0;$value<=5;$value++) {
    
    
        $keyvals{'Response'}{'brocade-extension-ip-route'}{'extension-ip-route'}={'name'=>"$name[$value]"};
               $keyvals{'Response'}{'brocade-extension-ip-route'}{'extension-ip-route'}={'dp-id'=>"$dp_id[$value]"};
              $keyvals{'Response'}{'brocade-extension-ip-route'}{'extension-ip-route'}={'ip-address'=>"$ip_address[$value]"};
               $keyvals{'Response'}{'brocade-extension-ip-route'}{'extension-ip-route'}={'ip-prefix-length'=>"$ip_prefix_length[$value]"};
    
    
        $keyvals{'Response'}{'brocade-extension-ip-route'}{'extension-ip-route'}={'ip-gateway'=>'*'};
    
    
    
    
        }
            print Dumper \%keyvals;
    
        Each array value assign into hash value. $var1= {
                  'Response' => {
                                'extension-ip-route' => {
                                                        'status-flags' =>  'U H L '
                                                                        ,
                                                        'ip-gateway' => '*',
                                                        'name' => '0/2',
                                                        'ip-address' =>  '192.168.20.11',
                                                        'dp-id' => '0',
                                                        'ip-prefix-length'=>'32'
    
                                                      }
                              }
                };
    

    【讨论】:

      【解决方案3】:

      是的。使用反斜杠创建对数组的引用:

      $hash{key} = \@array;
      

      请注意,这将链接到实际的数组,因此如果您执行如下更改:

      $array[0] = "foo";
      

      这也意味着$hash{key}[0] 设置为"foo"。

      如果这不是您想要的,您可以使用匿名数组引用 [ ... ] 复制值:

      $hash{key} = [ @array ];
      

      此外,您不必通过数组来执行此操作。您可以直接分配:

      $hash{key} = [ qw(foo bar baz) ];
      

      阅读更多关于在perldoc perlref中引用的信息

      【讨论】:

      • 也许是关于自动生存的一些话?:) 初学者很高兴知道
      • @loldop 嗯,是的,很多事情对于初学者来说都很好,但是,这里我们不是在讨论自动生存,只是分配简单的标量值。
      • 我认为您的意思是“eq 'foo'”而不是“== 'foo'”
      【解决方案4】:

      是的。有关访问此类数据结构的一些基本规则,请参阅http://perlmonks.org/?node=References+quick+reference,但要创建它,只需执行以下操作之一:

      %hash = ( 'somekey' => \@arrayvalue );
      $hash{'somekey'} = \@arrayvalue;
      %hash = ( 'somekey' => [ ... ] );
      

      【讨论】:

        猜你喜欢
        • 2016-05-25
        • 2020-07-19
        • 1970-01-01
        • 2012-08-22
        • 2013-06-24
        • 1970-01-01
        • 2016-02-21
        • 2011-07-26
        • 2011-04-20
        相关资源
        最近更新 更多