Perl 如何刷新foreach循环中的数组?
我正在编写一个Perl脚本来对散列进行一些数学运算。此哈希包含以下示例中给出的值。我已经写了下面的代码。如果我在不使用foreach循环的情况下为数组值单独执行这段代码,那么输出就可以了。但是如果我在数组值上使用foreach循环来运行它,那么a中的值的和是好的,但是从B的输出中添加前面的值Perl 如何刷新foreach循环中的数组?,perl,arrays,hash,perl-module,Perl,Arrays,Hash,Perl Module,我正在编写一个Perl脚本来对散列进行一些数学运算。此哈希包含以下示例中给出的值。我已经写了下面的代码。如果我在不使用foreach循环的情况下为数组值单独执行这段代码,那么输出就可以了。但是如果我在数组值上使用foreach循环来运行它,那么a中的值的和是好的,但是从B的输出中添加前面的值 Hash Sample: $VAR1 = 'A'; $VAR2 = { '"x"' => [values], '"y"' => [values], and so on.
Hash Sample:
$VAR1 = 'A';
$VAR2 = {
'"x"' => [values],
'"y"' => [values],
and so on...
$VAR3 = 'B';
$VAR4 = {
'"x"' => [values],
'"y"' => [values],
and so on...
$VARn....
代码:
我认为问题在于这一行。它存储所有以前的值,从而在下一个foreach循环中添加所有值
push @data, $ec;
因此,我有两个问题:
1) 如何在每次foreach循环迭代中刷新数组(@data)
2) 如何在数组ref($ec)中添加值并将其存储在数组中?因为当我使用以下代码时:
for $ec ($table{$h}{$et}) {
@count = map { sum(@{$_}) } @$ec;
$total = sum(@count);
}
输出为@count和$total提供了相同的值
请给我一些建议。如果我理解正确,只需对代码做一点小小的修改。在for循环的开头创建一个空数组(
@data
)。希望这有帮助
for my $h (sort keys %table) {
my @data;
如果我理解正确的话,只需对代码进行一点小的更改。在for循环的开头创建一个空数组(
@data
)。希望这有帮助
for my $h (sort keys %table) {
my @data;
1) 在循环体的顶部声明@data数组,在这里您希望以一个新的空数组开始。或者你的意思是说@data=@$ec
,而不是推送@data,$ec
2) 要在$ec引用的数组中添加值,只需说sum(@$ec)
;不需要地图
还不完全清楚您的数据结构是什么,或者您正试图用它做什么。
查看示例%表的外观以及您期望从中得到的结果会有所帮助。1)在循环体的顶部声明@data数组,您希望从一个新的空数组开始。或者你的意思是说@data=@$ec
,而不是推送@data,$ec
2) 要在$ec引用的数组中添加值,只需说sum(@$ec)
;不需要地图
还不完全清楚您的数据结构是什么,或者您正试图用它做什么。
查看示例%表的外观以及您期望从中得到的结果会有所帮助。事实上,您只需要说
my@data代码>在循环中,每次通过它都将是一个新的@data
代码>是没有意义的。当您使用my
创建一个数组时,它开始时为空。给它分配一个空列表并没有任何作用,这是您和Perl的时间代码>在循环中,每次通过它都将是一个新的@data
代码>是没有意义的。当您使用my
创建一个数组时,它开始时为空。为其分配一个空列表不会产生任何效果,这是您和Perl的时间。