如何访问存储在哈希中的数组元素?

时间:2011-03-28 09:07:37

标签: arrays perl hash perl-data-structures

我正在编写一个脚本并尝试从存储在哈希中的数组中获取一些值。在谷歌搜索之后,搜索关于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]等等。

3 个答案:

答案 0 :(得分:4)

这是哈希数组,请尝试这种方式:

$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'});  
 }

答案 1 :(得分:2)

您缺少的是$ action包含对数组的引用,因此下一部分必须取消引用该数组。然后在其中是一个哈希,你需要取消引用哈希。所以看起来应该是这样的:

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

(请注意,第一个以外的 - &gt;是可选的,所以这也很好:

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

完全相同的事情)

答案 2 :(得分:1)

外部的[]表示哈希在数组中。所以试试:

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

您可以省略 - &gt;在{Events}和[0]之间,但为了清楚起见,我更喜欢它。它在这里没有什么区别,但它确实在其他地方。比较:

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

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