如何访问存储在散列中的数组元素?

问题描述:

我正在研究一个脚本,并试图从存储在散列中的数组中获取一些值。在Google上搜索之后,在SO上搜索问题(并且有一些类似的标题,但仍未解决或者解决的问题与我的有点不同),并且在检查了Data Structures Cookbook并尝试了所有合理的尝试之后,我来请求你的帮助。如何访问存储在散列中的数组元素?

我有一个散列,$action,和一个数组,$action->{'Events'}。下面是输出为print Dumper($action->{'Events'});

$VAR1 = [{ 
    'Muted'  => 'something', 
    'Role'   => 'something', 
    'Event'  => 'something', 
    'Channel'  => 'something', 
    'Talking'  => 'something', 
    'UserNumber' => 'somenumber', 
    'CallerIDName' => 'somenumber', 
    'Conference' => 'somenumber', 
    'MarkedUser' => 'something', 
    'ActionID'  => 'somenumber', 
    'CallerIDNum' => 'somenumber', 
    'Admin'  => 'something' 
}]; 

我需要,例如,$action->{'EVENTS'}->{'CallerIDName'}价值,但是这句法和许多其他都不行。我甚至试过$action->{'EVENTS'}[6]$action->{'EVENTS'}->[6]等等。

这是哈希的数组,试试这个方法:

$action->{'EVENTS'}[0]->{'CallerIDName'} 

看到perldsc更多细节。


更新例子,如:

use strict; 
use warnings; 
use Data::Dumper; 
my $action = {}; 
$action->{'Events'} = [{'Muted' => 'something', 
      'Role' => 'something', 
      'Event' => 'something', 
      'Channel' => 'something', 
      'Talking' => 'something', 
      'UserNumber' => 'somenumber', 
      'CallerIDName' => 'somenumber', 
      'Conference' => 'somenumber', 
      'MarkedUser' => 'something', 
      'ActionID' => 'somenumber', 
      'CallerIDNum' => 'somenumber', 
      'Admin' => 'something'}]; 
#push hash into the array of hashes 
push(@{$action->{'Events'}},{'Muted' => 'something', 
       'Role' => 'something1', 
       'Event' => 'something1', 
       'Channel' => 'something1', 
       'Talking' => 'something1', 
       'UserNumber' => 'somenumber1', 
       'CallerIDName' => 'somenumber1', 
       'Conference' => 'somenumber1', 
       'MarkedUser' => 'something1', 
       'ActionID' => 'somenumber1', 
       'CallerIDNum' => 'somenumber1', 
       'Admin' => 'something1'}); 
for(my $i=0; $i < @{$action->{'Events'}}; $i++){ 
    print Dumper($action->{Events}[$i]); #print entire hash in array index $i 
    #print callerIDName key(any key) of each hash 
    print Dumper($action->{'Events'}[$i]->{'CallerIDName'}); 
} 
+0

这就是它,谢谢! – 2011-03-28 09:17:37

+0

你可以通过提供一种方法来遍历$ action - > {'Events'}中的哈希来进一步帮助我吗? – 2011-03-28 09:35:24

+1

@altvali:查看我更新的答案。 – 2011-03-28 15:38:31

你缺少的一个是,$行动包含数组的引用,所以接下来的部分必须取消引用数组。然后在那里是一个散列,你需要解散散列。因此,它应该是这样的:

$action->{'EVENTS'}[0]{'CallerIDname'} 

(注意 - >的超越第一是可选的,所以这是好的,以及:

$action->{'EVENTS'}->[0]->{'CallerIDname'} 

而且做同样的事情)

外部的[]表示散列在数组内。所以请尝试:

$action->{Events}->[0]->{CallerIDName} 

您可以省略{Events}和[0]之间的 - >,但为了清晰起见,我更喜欢它。它在这里没有什么不同,但它在其他地方。比较:

@array = (1,2,3); 
    $arrayref = \@array; 
    print $arrayref[0]; # accesses non-existent array @arrayref 

    print $arrayref->[0]; # '1'