Kar*_*rem 2 perl hash slice multidimensional-array
我在我的程序中使用哈希哈希.我想在同一行中将两个值相加.我的哈希的例子是:
%data_final = (
2010 => {
Jan => {
group1 => {
Type1 => {
Total1 => 12,
Total2 => 10
},
Type2 => {
Total1 => 17,
Total2 => 14
},
},
},
}
);
Run Code Online (Sandbox Code Playgroud)
我想为group1获得一个很大的Total1和Total2.我正在做以下事情:
$total1_sum = sum( @{$data_final}{2010}{Jan}{group1}}{qw/Type1 Type2}{Total1} );
$total2_sum = sum( @{$data_final}{2010}{Jan}{group1}}{qw/Type1 Type2}{Total2} );
Run Code Online (Sandbox Code Playgroud)
$ total1_sum的输出应为29,$ total2_sum的输出应为24,但我在"} {"附近出现语法错误.
非常感谢你的帮助.
@h{@k}{Total1}没有意义.您的意思是迭代切片返回的每个引用并获取引用的哈希元素的值,但您忽略了使用任何形式的循环.map这里很方便.
在应用map并修复错位后},您会得到:
my $total1_sum = sum map $_->{Total1},
@{ $data_final{2010}{Jan}{group1} }{qw( Type1 Type2 )};
my $total2_sum = sum map $_->{Total2},
@{ $data_final{2010}{Jan}{group1} }{qw( Type1 Type2 )};
Run Code Online (Sandbox Code Playgroud)
让我们分解出常见的比特:
my @results = @{ $data_final{2010}{Jan}{group1} }{qw( Type1 Type2 )};
my $total1_sum = sum map $_->{Total1}, @results;
my $total2_sum = sum map $_->{Total2}, @results;
Run Code Online (Sandbox Code Playgroud)