簡體   English   中英

如何訪問數組的Perl哈希中的值?

[英]How do I access values in a Perl Hash of Array of Arrays?

我建立了一個包含數組數組的哈希,我們將其稱為%hash_multidim,這樣Data :: Dumper的輸出看起來像這樣:

      'Key1' => [
                   [
                     '-3.81',
                     '-1.91',
                     '-1.86',
                     '-1.70'
                   ],
                   [
                     '1.35',
                     '1.04',
                     '-1.01',
                     '-2.69'
                   ]
                 ],
      'Key2' => [
                    [
                      '-1.63'
                    ],
                    [
                      '-1.17'
                    ]
                  ],

現在,我想在此結構的最底層訪問並執行操作。 例如,對於“ Key1”,我想找到第1行中的平均值(也就是[0]處數組的平均值)。 使用List :: Util qw(sum),我編寫了一個名為mean的子例程:

sub mean {
    return sum(@_)/scalar(@_);
}

但是,如果使用子例程,例如:

my $test = mean($hash_multidim{Key1}[0]);
print $test;

我沒有達到我的期望。 實際上,我得到:

43678288

我哪里做錯了? 如果我嘗試評估的結果

$hash_multidim{Key1}[0]

一切看起來都潔凈。 例如,

@test2 = $hash_multidim{Key1}[0];
print Dumper(\@test2);

產生以下輸出:

$VAR1 = [
          [
            '-3.81',
            '-1.91',
            '-1.86',
            '-1.70'
          ]
        ];

$hash_multidim{Key1}[0]是一個數組引用 ,但mean需要一個列表。 因此,您只需要“取消引用”它。 語法有些棘手,但是

my $test = mean( @{$hash_multidim{Key1}[0]} );

$hash_multidim{Key1}[0]是一個標量,其值是對數組的引用。 你傳遞的是一個標量mean當你想通過引用數組元素的值。

my $test = mean( @{ $hash_multidim{Key1}[0] } );


注意:除法運算符不能僅按數字除以列表。 因此,它在其操作數上施加了標量上下文。 scalar使用是多余的。 您可以簡單地使用

sub mean { sum(@_)/@_ }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM