[英]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.