哈希值中的数组(Perl)

16

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


3
请查看数据结构手册 - mpe
3个回答

30

是的,可以通过使用反斜杠创建一个对数组的引用:

$hash{key} = \@array;

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

$array[0] = "foo";

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

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

$hash{key} = [ @array ];

此外,您不必按顺序遍历数组来执行此操作。您可以直接进行分配:

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

perldoc perlref中了解更多关于如何制作引用的内容。


也许可以谈一下自动初始化?这对于初学者来说是很有用的知识。 - gaussblurinc
@loldop 嗯,对于初学者来说,了解很多东西都是好的,但是在这里我们不是在谈论自动初始化,只是简单的标量值被赋值。 - TLP
我认为你的意思是“eq 'foo'”,而不是“== 'foo'”。 - mswanberg

11

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

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

-1
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'

                                                  }
                          }
            };

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接