在Perl中访问哈希数组

时间:2016-08-05 20:51:37

标签: arrays perl hash

  1. 我在创建数据后访问数组的每个元素中的哈希有问题,但它给出了最后一个元素。我该怎么做才能访问我的数组的所有元素?
  2. 当我想将哈希值推送到数组时,我使用{}代替(),因为如果我不这样做就会给我错误。我何时使用{}?

    @stem = ();
    for($i=0;$i<2;++$i){
    push @stem,{u1=>1 , u2 => 2 , u3 => 3};}
    @ants = ();
    $count = 0;
    for($i=0;$i<scalar(@stem);++$i){
        @allowed = ();
        %hash = ();
    
        for($j=0;$j<scalar(@stem);++$j){
            push @allowed,{stem=>++$count,hinfo=>++$count};
        }
        %hash = ( allowed=>\@allowed ,solution=>++$count);
        push (@ants,\%hash);
    
    }
    
    for($i=0;$i<scalar(@ants);++$i){
        %test = %{$ants[$i]};
        print "=>",$test{solution},"\n";
        @temp = @{$test{allowed}};
        for($j=0;$j<scalar(@temp);++$j)
            {print $j,":",$temp[$j]->{stem}," ",$temp[$j]->{hinfo},"\n";}
    }
    

    输出:
    =&GT; 21个
    0:16 16
    1:18 18
    2:20 20
    =&GT; 21个
    0:16 16
    1:18 18
    2:20 20

1 个答案:

答案 0 :(得分:0)

  

2)当我想将哈希推送到数组时,我使用{}而不是(),因为如果我不这样做就会给我错误。我何时使用{}

我可以回答这个问题2.

当您使用() perl看作元素列表时。当您使用{} perl时,将其视为对哈希的引用。

所以当你这样做时:push @Arr, (x=>2, y=>5);四个元素将被推送到@Arrx2y5。这不是你的意图。

但是当你这样做时:push @Arr , {x => 2, y => 5};对包含xy作为键的匿名哈希的单一引用,25 as相应的值将推送到@Arr