我有一个foreach
类似的循环
foreach my $ref_array (@$array1)
$array
读取整个 Excel 工作表的结果在哪里。
在我的循环内部$ref_array
获取工作表中每一行的值。现在我想推进$ref_array
它以获得电子表格下一行的值。我该如何在循环中间做呢?
我有一个foreach
类似的循环
foreach my $ref_array (@$array1)
$array
读取整个 Excel 工作表的结果在哪里。
在我的循环内部$ref_array
获取工作表中每一行的值。现在我想推进$ref_array
它以获得电子表格下一行的值。我该如何在循环中间做呢?
0
从到最后一个数组索引循环$#$array1
将允许您轻松访问下一行/元素:
for my $index ( 0 .. $#$array1 ) {
my ( $current, $next ) = @$array1[ $index, $index + 1 ];
# Process the rows
}
Perl 5.12.0+ 替代方案:
for ( my ( $idx, $row ) = each @$array1 ) {
last if $idx == $#array1; # Skip last iteration
my $next_row = $array1->[$idx+1];
# ...
}
两个想法:
首先,如果您总是需要一对连续的行,那么您可以记住前一行,例如
my $prev_row;
foreach my $row (@rows) {
# Skip first row; we don't have a previous one yet
if (!$prev_row) {
$prev_row = $row;
next;
}
# Do stuff with $prev_row and $row
$prev_row = $row;
}
其次,使用正常的 C 风格for
循环。在这种情况下,你有索引并且可以一直访问任何需要的元素:
# don't iterate over the last line so not to access beyond the array
for (my $idx = 0; $idx < (scalar(@rows) - 1); $idx++) {
my $row = $rows[$idx];
my $next_row = $rows[$idx + 1];
}
您不能foreach
仅通过仅使用当前元素来“简单”地做到这一点。它不是一个交互器,它是对该列表中当前元素的引用。