我有一个类似
的foreach
循环
foreach my $ref_array (@$array1)
其中$array
是读取整个Excel工作表的结果。
在我的循环中$ref_array
获取工作表中每一行的值。现在我想提前$ref_array
,使其获得电子表格下一行的值。我怎么能在循环中间做到这一点?
答案 0 :(得分:7)
从0
循环到最后一个数组索引$#$array1
将允许您轻松访问下一行/元素:
for my $index ( 0 .. $#$array1 ) {
my ( $current, $next ) = @$array1[ $index, $index + 1 ];
# Process the rows
}
答案 1 :(得分:6)
Perl 5.12.0+替代方案:
for ( my ( $idx, $row ) = each @$array1 ) {
last if $idx == $#array1; # Skip last iteration
my $next_row = $array1->[$idx+1];
# ...
}
答案 2 :(得分:5)
两个想法:
首先,如果你总是需要一对连续的行,那么你就能记住上一行,例如
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
。它不是一个交互者,它是对该列表中当前元素的引用。